解析 - 更改不是当前用户的用户

时间:2015-10-07 21:39:42

标签: swift parse-platform

我正在尝试使用以下代码更改不是当前用户的用户

  let query = PFQuery(className:"_User")

        query.getObjectInBackgroundWithId(userId) {
            (object: PFObject?, error: NSError?) -> Void in

            print("UPDATE THIS USER->\(object)")

            if error != nil
            {
                print("COULD NOT CHANGE REPUTATION \(error?.localizedDescription)")
            }
            else if let object = object
            {
                object.incrementKey("reputation", byAmount: value)
                object.saveEventually({ (succeeded: Bool, error: NSError?) -> Void in
                    print("USER REPUTATION CHANGE SUCCEDDED? ->\(succeeded) -> MODIFIED TO \(value)")
                })
            }
        }

我可以检索用户但无法保存更改,因为我收到以下输出错误:

2015-10-08 10:28:39.343 Hobbiester [11591:718652] [错误]:捕获“NSInternalInconsistencyException”,原因是“除非已通过logIn或signUp验证用户,否则无法保存用户”:

2 个答案:

答案 0 :(得分:0)

这不会按设计工作。

Parse允许您读取其他_user对象,但不能写入它们。如果你考虑一下,从安全角度来看这是有道理的。否则,您可以修改其他用户的密码,电子邮件,名称等。客户端应用程序必须以此用户身份登录才能对该_user对象进行更改。

https://parse.com/docs/android/guide#security-object-level-access-control

  

...唯一的例外是_User类。我们从不允许用户写入彼此的数据,但默认情况下他们可以读取它们。

您可以在解析中创建另一个表,也许是由_users索引的声誉修改表。任何用户都可以写入该表。然后,要获取当前信誉,请查询修改表并添加所有更改。您可以对其进行设置,以便所有用户都能以某种对您的应用程序有意义的方式访问新类。只是一个想法。

答案 1 :(得分:0)

正如其他答案所提到的,你不能修改不是当前用户的用户,但你可以创建一个云功能并使用Parse.Cloud.useMasterKey(); 这将允许您随后查询用户并修改对象。

Parse.Cloud.define("RemoveFollower", function(request, response){
var username = request.params.username_of_other_user;
var query = new Parse.Query(Parse.User);
query.equalTo("username", username);
query.find({
success: function(results){
    var u = results[0];
    //u modify the user u however you like...
    u.save();
    response.success("Success");
},
error: function(){
    response.error("Error");
}
});