0

私の解析サーバー クラウド コードには、1 つの beforeSave 関数と 1 つの afterSave 関数があります。beforeSave は、「post」テーブルに「誰が保存したか」の検証です。afterSave 関数は、コメントが「comments」テーブルに保存されると、「post」テーブルのオブジェクトを更新します。ただし、「result[0].save(null, { useMasterKey: true });」再度 beforeSave 機能を開始すると、クラウドが保存を行っており、ユーザーがいないため、「beforeSave」部分でのユーザー認証のため、保存ができません。少し複雑ですが、うまく説明できれば幸いです。クラウドから保存するときに beforeSave メソッドをバイパスする方法はありますか?

  Parse.Cloud.beforeSave('post', function (req, res) {




  });




  Parse.Cloud.afterSave('comment', function(req) {


    var post = Parse.Object.extend('post');
    var query = new Parse.Query(post);
    query.equalTo('userid', req.user.id);
    query.find({

      success: function(result) {

          if ( result.length > 0 ) {


              result[0].set('commented', 'yes');
              result[0].save(null, { useMasterKey: true });

          }

          else {

          }

      }

    });


  });
4

2 に答える 2

1

実際の問題は、リクエストがクラウド コードではなくユーザーによって送信された場合に beforeSave をアクティブにしたかったことです。どちらを使用して直接成功するかを使用して解決しましif (req.master)た。それ以外の場合、ユーザーが要求を行った場合、afterSave のコードが実装されます。

于 2016-03-08T12:35:14.660 に答える
0

まず、最後の質問に対する答えはノーです。beforeSave トリガーをスキップすることはできません。オブジェクトを保存するときに常に呼び出されます。

あなたの場合の最良のオプションは、おそらくマスターキーを使用する代わりに、次の方法で投稿を保存することです:

result[0].save(null, {sessionToken: req.user.getSessionToken()});

これによりreq.user、post beforeSave メソッドのオブジェクトが通常どおり読み込まれ、ユーザー認証コードが機能します。

于 2016-03-04T18:24:12.120 に答える