6

我有兴趣根据我执行的操作将属性保存到数据库中的用户currentUser。根据以下代码,我收到错误消息“用户无法保存,除非他们已通过登录或注册进行身份验证”

NSString *IDToFetch = @"some_id";
PFQuery *query = [PFUser query];
[query whereKey:@"user_id" equalTo:IDToFetch];
PFUser *foundUser = (PFUser *)[query getFirstObject];

foundUser[@"new_column"] = @"Some text";
[foundUser saveEventually]; //here an exception is thrown

我想知道是否有解决此问题的方法,我可以将属性保存到foundUser而无需登录该用户。谢谢你的帮助!

4

2 回答 2

12

如果要更新当前不是登录用户的用户,则需要使用master-key.

例如,您可以从 CloudCode 执行此操作;

Parse.Cloud.define('editUser', function(request, response) {
    var userId = request.params.userId,
        newColText = request.params.newColText;

    var User = Parse.Object.extend('_User'),
        user = new User({ objectId: userId });

    user.set('new_col', newColText);

    Parse.Cloud.useMasterKey();
    user.save().then(function(user) {
        response.success(user);
    }, function(error) {
        response.error(error)
    });
});

并从您的 iOS 项目中调用它;

[PFCloud callFunction:@"editUser" withParameters:@{
    @"userId": @"someuseridhere",
    @"newColText": @"new text!"
}];
于 2013-09-06T06:45:56.610 回答
2

好的 提供这个作为答案,但基本上不推荐它!我认为云代码路线在一天结束时更清洁。但是,这可以说是更容易..

您可以创建另一个与每个用户配对的表。

例如。

表名

user_extra_details

字段

用户

分数

因此其他用户可以在 user_extra_details 上编辑此特定字段

但是您怀疑这可能会导致大量额外的查询,但这并非不可能,只是......不方便。因此,这是您在该设置中访问数据的方式。

PFQuery *userQuery = [PFQuery queryWithTable:@"Users"];
[userQuery whereKey:Some Key equalTo:some value];

PFQuery *userDetails [PFQuery queryWithTable:@"user_extra_details"];
[userDetails whereKey:@"User" inQuery:userQuery];
[userDetails includeKey:@"User"];
[userDetails fetch];

您需要注意的是,重复的详细信息对象显然会产生多个结果。因此,我建议对 extra_detail 对象进行删除和插入与更新,以帮助对抗任何错误的重复。

于 2013-09-09T00:34:56.097 回答