rih*_*ihe 2 objective-c ios parse-platform
我想写一个PFUser对象currentUser,我已经添加了ACL基于Parse开发人员指南,但我仍然收到一个错误:
'User cannot be saved unless they have been authenticated via logIn or signUp'
Run Code Online (Sandbox Code Playgroud)
_我的代码:
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]);
}
}];
Run Code Online (Sandbox Code Playgroud)
我想我做的一切都是正确的,所以我无法弄清楚可能是什么问题.所以,如果您之前做过类似的事情或知道问题在哪里,我会非常感谢任何建议.
出于安全原因,Parse不允许您将任何更改保存到当前未登录的用户.
如果您希望能够进行更改并保存更改user,则需要使用Cloud Code和Master Key绕过此障碍.
我以前遇到过这样的多个问题,而且每次我都被迫使用解决方法Cloud Code.
以下是我为在两个用户之间创建朋友关系所做的解决方法示例:
[PFCloud callFunction:@"editUser" withParameters:@{@"userId": user.objectId}];
Run Code Online (Sandbox Code Playgroud)
上面的代码语句是在xcode中,并执行我添加到我的Cloud Code文件中的函数.
然后,这是我的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)
});
});
Run Code Online (Sandbox Code Playgroud)
上面的代码使用它Master Key来保存对当前登录用户以及objectId传递给此函数的用户的更改.
代码详情:
var relation
Run Code Online (Sandbox Code Playgroud)
这只是我正在创建的一个变量,用于保存以下函数返回的内容:
user.relation("friendsRelation");
Run Code Online (Sandbox Code Playgroud)
在上面的函数中,"friendsRelation"是Parse中我的PFRelation键的名称.
现在我们有一个有效的关系对象包含在我们调用的变量中relation,我们用currentUser对象的参数执行这个函数.
在那之后,剩下的就是保存一切.我不用javascript编程,但我仍然能够通过查看Parse Cloud Code文档,并在他们的支持论坛上搜索来提出上述解决方案.
如果您从上面获取我的模板,并进行一些小的更改,那么您应该能够轻松地完成您的需要.你只需要跳过这些额外的箍,因为Parse SDK不希望有人可以登录并以某种方式对其他用户的帐户进行更改,无论是由于他们自己的错误还是开发人员的错误.
编辑:
以下是为当前用户添加关系的代码:
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]);
}
}];
Run Code Online (Sandbox Code Playgroud)
然后您可以在以下情况后立即调用Cloud Code方法:
[PFCloud callFunction:@"editUser" withParameters:@{
@"userId": user.objectId
}];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1922 次 |
| 最近记录: |