无法通过PFUser currentuser写入非当前用户对象

我想通过currentUser写一个PFUser对象,我已经添加了基于Parse开发者指南的ACL ,但是我仍然得到一个错误:

  'User cannot be saved unless they have been authenticated via logIn or signUp' 

_我的代码:

 PFQuery *query = [PFUser query]; [query whereKey:@"username" equalTo:self.bBo]; PFObject *friendData = [query getFirstObject]; PFUser *user = (PFUser *)friendData; PFACL *userACL = [PFACL ACL]; user.ACL = userACL; [userACL setWriteAccess:YES forUser:[PFUser currentUser]]; PFRelation *friendRelation = [user relationforKey:@"array"]; [friendRelation addObject:[PFUser currentUser]]; [user saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { if (error){ NSLog(@"Error %@ %@", error, [error userInfo]); } }]; 

我认为我做了一切正确的,所以我不知道可能是什么问题。 所以,如果你早先提出这样的问题,或知道问题在哪里,我真的很感激任何build议。

出于安全原因,Parse将不允许您保存对当前未login的用户所做的任何更改。

如果您希望能够对user进行修改并保存,则需要使用Cloud CodeMaster Key来解决此问题。

我以前有过这样的问题,每次我都被迫通过Cloud Code使用一个解决方法。

以下是我为创build两个用户之间的朋友关系所做的解决方法的一个示例:

 [PFCloud callFunction:@"editUser" withParameters:@{@"userId": user.objectId}]; 

上面的代码语句在xcode中,并执行我已经添加到我的Cloud Code文件的function。

那么,这是我的Cloud Code文件的样子:

 Parse.Cloud.define('editUser', function(request, response) { var userId = request.params.userId; var User = Parse.Object.extend('_User'), user = new User({ objectId: userId }); var currentUser = request.user; var relation = user.relation("friendsRelation"); relation.add(currentUser); Parse.Cloud.useMasterKey(); user.save().then(function(user) { response.success(user); }, function(error) { response.error(error) }); }); 

上面的代码使用Master Key来保存对当前login用户以及objectId传递给该函数的用户的更改。

代码详情:

 var relation 

这只是一个variables,我正在创build以保持以下function返回:

 user.relation("friendsRelation"); 

在上面的函数中, "friendsRelation"是Parse中我的PFRelation键的名字。

现在,我们有一个有效的关系对象包含在我们的variables叫relation ,我们执行这个函数与我们的currentUser对象的参数。

之后,剩下的就是保存一切。 我不用JavaScript编程,但是我仍然能够通过查看Parse Cloud Code文档并在他们的支持论坛上search来想出上述解决scheme。

如果你从上面拿走我的模板,并做一些小的改动,那么你应该能够轻松地完成你所需要的。 你只需要跳过这些额外的环节,因为Parse SDK不希望有人可以login,并以某种方式更改另一个用户的帐户,无论是由自己的错误还是开发人员的错误。

编辑:

以下是为当前用户添加关系的代码:

 PFRelation *friendsRelation = [[PFUser currentUser]relationforKey:@"friendsRelation"]; PFUser *user = [self.parseUsers objectAtIndex:indexPath.row]; [friendsRelation addObject:user]; [currentUser saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { if (error) { NSLog(@"%@ %@", error, [error userInfo]); } }]; 

然后您可以在以下地址之后调用Cloud Code方法:

  [PFCloud callFunction:@"editUser" withParameters:@{ @"userId": user.objectId }];