我有一个带有按钮的Item ViewController来与项目所有者一起创建chatRoom。
-(void)createChatRoom
{
PFQuery *queryForChatRoom = [PFQuery queryWithClassName:@"ChatRoom"];
[queryForChatRoom whereKey:@"user1" equalTo:[PFUser currentUser]];
[queryForChatRoom whereKey:@"user2" equalTo:self.Item.Owner];
PFQuery *queryForChatRoomInverse = [PFQuery queryWithClassName:@"ChatRoom"];
[queryForChatRoomInverse whereKey:@"user1" equalTo:self.Item.Owner];
[queryForChatRoomInverse whereKey:@"user2" equalTo:[PFUser currentUser]];
PFQuery *combinedChatRoomQuery = [PFQuery orQueryWithSubqueries:@[queryForChatRoom, queryForChatRoomInverse]];
[combinedChatRoomQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if ([objects count] == 0){
PFChatRoom *ChatRoom = [PFChatRoom objectWithClassName:@"ChatRoom"];
[ChatRoom setObject:[PFUser currentUser] forKey:@"user1"];
[ChatRoom setObject:self.Item.Owner forKey:@"user2"];
[ChatRoom saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
[self performSegueWithIdentifier:@"ItemToChatSegue" sender:nil];
}];
}
}];
}当我按下按钮来执行这段代码时,在任何给定的运行中,在任何线程上都会发生错误。
[PFUser(Private) checkSaveParams]我可以登录到控制台--我的PFUser currentUser和这个ViewController的Item.Owner --所以有一些对象可以使用。如果我在没有第二个用户的情况下尝试代码,实际上我可以保存到分析chatRoom对象,其中只附加了PFUser currentUser。
我需要做什么才能将非当前用户添加到这个chatRoom中?
发布于 2014-06-26 18:42:06
出于安全考虑,Parse不允许当前用户修改您的第二个用户。如果您希望能够为第二个用户进行更改,则需要使用云代码来绕过这个路障。
我以前遇到过很多这样的问题,每次我都被迫通过云代码来解决问题。
下面是我为在两个用户之间建立朋友关系而做的一个解决方法的例子:
[PFCloud callFunction:@"editUser" withParameters:@{@"userId": user.objectId}];上面的代码语句在xcode中,并执行我添加到我的Cloud文件中的函数。
然后,下面是我的云代码文件的样子:
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)
});
});上面的代码使用主键来保存对当前登录用户和传递给此函数的objectId的用户的更改。
代码详细信息:
var relation这只是我创建的一个变量,用于保存以下函数返回的内容:
user.relation("friendsRelation");在上面的函数中,"friendsRelation"是Parse中我的PFRelation键的名称。
现在,我们在变量relation中有了一个有效的关系对象包含,我们使用currentUser对象的一个参数来执行这个函数。
在那之后,剩下的就是保存一切。我不使用javascript进行编程,但是通过查看Parse文档并在它们的支持论坛上搜索,我仍然能够找到上面的解决方案。
如果您从上面获取我的模板,并根据实际使用的解析对象类型(例如ChatRoom )进行一些小的更改,那么您应该能够轻松地完成所需的任务。您只需跳过这些额外的循环,因为Parse不希望有人登录并以某种方式更改另一个用户的帐户,无论是他们自己的错误还是开发人员的错误。
https://stackoverflow.com/questions/24436917
复制相似问题