我正在尝试使用以下代码更改不是当前用户的用户
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验证用户,否则无法保存用户”:
答案 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");
}
});