无法通过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 Code
和Master 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 }];