如何在Parse中使用useMasterKey更新用户

时间:2017-12-24 11:45:14

标签: parse-platform parse-server

问题描述

当其他用户点击我的Xamarin按钮时,我正在尝试更新用户。 然后,我使用Cloud Code执行此操作,但它不起作用

我的代码

这是我完整的JS代码:

Parse.Cloud.beforeSave("Archive", function(request, response) {
  Parse.serverURL = 'https://pg-app-0brffxkawi8lqvf2eyc2isqrs66zsu.scalabl.cloud/1/';
  var status = request.object.get("status");
  if (status == "validated") {
    var event = request.object.get("event");
    event.fetch({
      success: function(myEvent) {
        var coinsEvent = myEvent.get("coins");
        var user = request.object.get("user");
         user.fetch({
          success: function(myUser, coinsEvent, user) {
            var email = myUser.get("email");
            var coinsUser = myUser.get("coins");
            myUser.set("coins", coinsUser + coinsEvent);
            return myUser.save(null, {useMasterKey:true});
          }
        });
      }
    });
  }
  response.success();
});

我认为myUser.save(null, {useMasterKey:true});应该有用

我确实有这个错误:

  

2017年12月24日,格林尼治标准时间12:27 + 1 - ERRORError生成[PUT] / 1 / classes / _User / 1GPcqmn6Hd的响应   “无法修改用户1GPcqmn6Hd。”

     

{     “硬币”:250   }

环境设置

  • 服务器
    • parse-server version:v2.3.3
    • 服务器:Sashido

1 个答案:

答案 0 :(得分:0)

你的成功分支从不调用response.success()这是一个问题......虽然可能不是问题。

您还在'beforeSave'功能中进行了两次提取,不建议这样做。 'BeforeSave'必须非常快速地发生并且需要花费时间。我会考虑考虑其他选择。

如果您确实需要这样做,请考虑使用Parse.Query("event")执行include("user")并使用query.first({useMasterKey:true})触发查询。

您确定coinsEvent是您认为的吗? Fetch仅返回获取的对象...不确定您是否可以在其他参数中进行curry。我会将你的最终成功例程更改为(仔细检查coinsEvent是否有效):

 success: function(myUser) {
    var coinsUser = myUser.get("coins");
    myUser.set("coins", coinsUser + coinsEvent);
    return myUser.save(null, {useMasterKey:true}).then(_ => response.success());
  }