【问题标题】:Parse.com update user Cloud Code giving error 206: cannot modify userParse.com 更新用户云代码给出错误 206:无法修改用户
【发布时间】:2019-01-01 11:08:25
【问题描述】:

我正在尝试在 Parse Server 上编写一个简单的云代码函数来更新用户的参数。我的功能如下:

Parse.Cloud.define("updateUser", function(request, response) {
    var query = new Parse.Query("User");
    query.equalTo("username", request.params.username);
    var type = request.params.type;
    query.first({
        success: function (user) {
            user.set("userType", type);
            user.save(null, {
                success: function (object) {
                    response.success("SUCCESS");
                }, error: function (object, error) {
                    response.error(error);
                }
            });
        }, error: function (error) {
            response.error(error);
        }
    });
});

这就是我从 Express Node.js 应用程序调用服务器端函数的方式:

Parse.Cloud.run("updateUser", { useMasterKey: true, username: req.body.username, type: req.body.type }, {
    success: function(final) {
        res.send({ res: "SUCCESS" });
    }, error: function(error) {
        res.send({ res: error });
    }
});

第一个查询返回一个用户,但后续保存抛出“206: cannot modify user”错误。

此功能在我们以前的平台上运行良好,但现在导致 Parse Server 出现问题。

非常感谢任何帮助。

【问题讨论】:

  • 你必须使用主密钥,他们改变了你在云代码中使用 parse-server 处理主密钥的方式......检查他们的 github
  • 我在调用函数时确实指定了主密钥 - { useMasterKey: true } ...这是根据他们的文档

标签: parse-platform


【解决方案1】:

useMasterKey 应该被发送到你的云代码方法的 user.save() 并且在你的代码中你从你的 nodeJS 应用发送了 useMasterKey。

所以最后你的代码应该如下所示:

Parse.Cloud.define("updateUser", function(request, response) {
var query = new Parse.Query("User");
query.equalTo("username", request.params.username);
var type = request.params.type;
query.first({
    success: function (user) {
        user.set("userType", type);
        user.save({useMasterKey : true}, {
            success: function (object) {
                response.success("SUCCESS");
            }, error: function (object, error) {
                response.error(error);
            }
        });
    }, error: function (error) {
        response.error(error);
    }
});

});

我还会根据最佳实践更改我的代码以使用 Promises 和箭头函数。

希望对你有帮助。

【讨论】:

    【解决方案2】:

    在没有云功能的情况下,它有一个不同的实现。由于将更新其“lastActivity”状态的是当前登录的客户端,您可以创建一个简单的方法,如下所示:

    _lastActivity = () => {
        var currentUser = Parse.User.current();
        currentUser.set("lastActive", new Date());
        currentUser
          .save()
          .then(result => {
            console.log(result);
          })
          .catch(error => {
            console.log(error);
          });
      };
    

    现在,当用户与您的应用程序交互时,会在某些时候调用此方法,例如:滑动屏幕,或刷新 ScrollView 组件...或者,只要会话处于活动状态,您就可以每隔一段时间调用它...您知道什么效果最好。

    然后您可以编写一个查询来获取不是当前用户的所有用户,具体取决于您是否要在 FlatList 组件上填充它。当您将结果保存在状态中时,您可以简单地使用状态中的“lastActive”数据,

    使用图标:

     <Ionicons name="md-radio-button-on" size={15} 
    color={new Date() -item.get("lastActive") < 600000? "green": "red"}/>
    

    图标旁边的文字:

    <Text style={{fontWeight:"400",color: "#666",fontSize: 12}}>
      {new Date() - item.get("lastActive") < 600000? "online": "offline"}</Text>
    

    点击查看:Image of How this Implementation looks

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-09
      • 2014-09-13
      • 1970-01-01
      • 2016-05-04
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 2015-07-03
      相关资源
      最近更新 更多