【发布时间】:2014-08-26 15:59:49
【问题描述】:
更新:简而言之,我想使用主密钥,因为我需要用我当前的用户编写另一个用户对象,但我不想覆盖所有安全性,我只想使用它功能。 this question 中接受的答案给出了一个很好的起点,但是我无法让它工作。这是本题的最后一个代码块。
我有两个独立的功能。第一个是纯objective-c,它从currentUser的firstRelation中删除用户。在我将不同的 CloudCode 函数添加到不同的视图控制器之前,它运行良好,没有任何问题。 CloudCode函数使用主密钥并将currentUser添加到otherUser的sampleRelation并将otherUser添加到currentUser的sampleRelation(firstRelation和sampleRelation是@内的两个不同列987654332@类)。
所以问题是当我从currentUser 的firstRelation (与当前用户)中删除用户时,我的应用程序崩溃,因为用户必须通过登录或注册进行身份验证。实际上我不明白这一点,因为在这种情况下,我用currentUser而不是另一个用户编写currentUser,所以它必须没有任何问题(并且在CloudCode之前工作)。
我几乎可以肯定这是因为我在 CloudCode 中使用了主密钥,但不知道如何才能避免它。其他一切都还在工作,例如我可以使用currentUser 上传图片。
这是我用于 CloudCode 的代码,JavaScript 对我来说完全未知,也许有人会看到导致问题的原因。
Parse.Cloud.define('editUser', function(request, response) {
Parse.Cloud.useMasterKey();
var userQuery = new Parse.Query(Parse.User);
userQuery.get(request.params.userId)
.then(function (user) {
var relation = user.relation("sampleRelation");
relation.add(request.user);
// chain the promise
return user.save();
}).then(function (user) {
var currentUser = request.user;
var relation = currentUser.relation("sampleRelation");
relation.add(user);
// chain the new promise
return currentUser.save();
}).then(function () {
response.success();
}, function (error) {
response.error(error);
});
});
当我尝试移除对象时它崩溃了:
PFUser *user = [self.friends objectAtIndex:indexPath.row];
PFRelation *myFriendsRel = [self.currentUser relationForKey:@"simpleRelation"];
if ([self isFriend:user]) {
for (PFUser *friendName in self.friends) {
if ([friendName.objectId isEqualToString:user.objectId]){
[self.friends removeObject:friendName];
break; // to exit a loop
}
}
// remove from parse
[myFriendsRel removeObject:user];
NSLog(@"deleted: %@", user.username);
}
[self.currentUser saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
if (error){
NSLog(@"Error %@ %@", error, [error userInfo]);
}
}];
这是最新的尝试,基于 Fosco 对另一个问题的回答。它可以工作,但与早期版本相同。
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);
user.save(null, { useMasterKey:true}).then(function(user) {
response.success(user);
}, function(error) {
response.error(error)
});
});
【问题讨论】:
-
目前还不清楚失败的地方..
-
@Fosco 抱歉,我忘记添加了。添加的代码运行良好,没有任何问题,直到我开始使用云代码。
-
仍然不清楚,一点也不。
-
@Fosco 我创建了一个函数,允许当前用户将另一个用户添加到他的朋友列表中。如果当前用户点击添加朋友按钮,我会将
sampleUser分配给他的朋友列表(sampleRelation),并将currentUser分配给sampleUser的朋友列表。由于安全原因,我无法写sampleUser的sampleRelation,因此我开始使用带有 CloudCode 的主密钥。有了新的 CC 功能,我可以写另一个用户的sampleRelation,但它引发了另一个问题。我在名为firstRelation的用户类上有另一个PFRelation。这就像最爱.. -
@Fosco 当前用户可以添加其他用户到此列表,但不会添加到其他用户的收藏夹。当前用户自然可以从收藏列表中删除用户,该功能在 CC 功能之前已经实现并且运行良好。现在它不起作用并给出错误,因为我使用的是主密钥。
标签: javascript objective-c parse-platform