如何使用 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 分数?的主要内容,如果未能解决你的问题,请参考以下文章

未解决的参考:MasterKey

Swift:检查变量是不是为零

如何在排名查询中实现分页?

MySQL 5.7 TDE

sql 语句中如何比较当前时间与指定时间是不是相同

如何解析一个属性?