如何使用 MasterKey 增加不是 currentUser 的 PFUser 分数?
Posted
技术标签:
【中文标题】如何使用 MasterKey 增加不是 currentUser 的 PFUser 分数?【英文标题】:How do I increment a PFUser score that is not currentUser with MasterKey? 【发布时间】:2015-04-23 20:20:43 【问题描述】:我正在开发一个使用 parse.com 作为后端的简单 ios 游戏。
我想在游戏结束时增加所有参与游戏的 PFUser 的分数,而不仅仅是 currentUser。
我使用以下目标 c 调用我的云代码。 (objects 是一个包含游戏中所有用户的数组)
for (PFObject *object in objects)
int count = 100;
NSNumber *addToScore = [NSNumber numberWithInt:count];
[PFCloud callFunction:@"incrementUserScore" withParameters:@
@"userId":object.objectId, @"baseNumber":addToScore ];
云代码本身如下
Parse.Cloud.define('incrementUserScore', function(request, response)
var userId = request.params.userId,
addToScore = request.params.baseNumber,
User = Parse.Object.extend('_User'),
user = new User( objectId: userId );
user.increment("score",addToScore);
Parse.Cloud.useMasterKey();
user.save().then(function(user)
response.success(user);
, function(error)
response.error(error)
);
);
调用云代码时我的游戏崩溃了。
我是一名初学者,完全没有使用过javascript。 有没有人看到明显的错误?
【问题讨论】:
【参考方案1】:所以您的云代码就是问题所在。您需要为每个用户对象创建一个查询,并从该查询中设置分数并保存。
所有这些信息都在:
https://parse.com/docs/cloud_code_guide#functions
您需要根据传入的 userId 获取用户对象,然后将该对象的分数更改为适当的值。下面是文档中的示例云函数,它可以让您开始执行此任务的查询部分。
Parse.Cloud.define("averageStars", function(request, response)
var query = new Parse.Query("Review");
query.equalTo("movie", request.params.movie);
query.find(
success: function(results)
var sum = 0;
for (var i = 0; i < results.length; ++i)
sum += results[i].get("stars");
response.success(sum / results.length);
,
error: function()
response.error("movie lookup failed");
);
);
【讨论】:
云代码中没有查询的原因是因为我之前查询了PFUsers以填充对象数组。是否还需要在云代码中添加查询? 是这样你就可以得到你要修改的用户对象了。 如果我将用户对象作为参数传递给云代码函数会怎样? 我相信那是不明智的。最好只传递用户 ID 并获取它们。传递用户对象可能会导致两个不同环境中的无效对象以上是关于如何使用 MasterKey 增加不是 currentUser 的 PFUser 分数?的主要内容,如果未能解决你的问题,请参考以下文章