gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:58:09 27 4
gpt4 key购买 nike

我想通过 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]);
}
}];

我认为我做的一切都是正确的,所以我无法弄清楚可能是什么问题。所以如果你早些时候做了这样的事情或者知道问题出在哪里,我将非常感谢任何建议。

最佳答案

出于安全原因,Parse 不允许您将任何更改保存到当前未登录的用户。

如果您希望能够对用户进行更改并保存,您需要使用Cloud CodeMaster Key来获取绕过这个障碍。

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

这是我为在两个用户之间创建 friend 关系所做的变通方法示例:

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

上面的代码语句在 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)
});
});

以上代码使用Master Key 来保存对当前登录用户和将objectId 传递给此函数的用户的更改。

代码详情:

var relation

这只是我创建的一个变量,用于保存以下函数返回的内容:

user.relation("friendsRelation");

在上面的函数中,"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]);
}
}];

然后您可以在之后立即调用 Cloud Code 方法:

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

关于ios - 无法通过 PFUser currentuser 写入非当前用户对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24580413/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com