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

現在ログインしているユーザーではないユーザーを更新する場合は、 を使用して Parse を呼び出す必要があります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

OKこれを答えとして提供しますが、基本的にはお勧めしません! 結局のところ、クラウド コード ルートの方がすっきりしていると思います。しかし、これは間違いなく簡単です..

各ユーザーとペアになる別のテーブルを作成できます。

例えば。

テーブル名

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 に答える