2017-02-13 10 views
2

私のクラウドコードには機能がありますが、問題の解決方法がわかりません。クラウドコードでエラーが発生しました

オリジナル問題:

Parse.Cloud.define("assignTokenToUser", function(request, response) { 
    console.log("Inside assignTokenToUser"); 
    var token = Math.random().toString(30).substring(7); 
    query = new Parse.Query("User"), 
    email = request.params.email; 

    query.equalTo("username", email); 


    query.find({ useMasterKey: true }).then(function(results) { 
     query.first({ 
     success: function(user) { 
      // Successfully retrieved the object. 
      user.set("emailToken", token); 
      user.save(); 
      console.log("success..."); 
      response.success(token); 
     }, 
     error: function(error) { 
      console.log("error 1..."); 
      response.error(error); 
     } 
     }); 
    }, function(error) { 
    console.log("error 2..."); 
    response.error(error); 
    }); 
}); 

これは、インターネットをスキャンした後、共通の問題であるように見えた、と私の分析はuseMasterKeyは、我々は、クエリオブジェクトを使用するたびに合格する必要があるということです。これに対応して、私のログファイルには、ユーザーを保存しようとすると、Code 206エラーが発生することが示されています。

ログファイルの出力:

コード:

Parse.Cloud.define("assignTokenToUser", function(request, response) { 
    console.log("Inside assignTokenToUser"); 
    var token = Math.random().toString(30).substring(7); 
    query = new Parse.Query("User"), 
    email = request.params.email; 

    query.equalTo("username", email); 


    query.find({ useMasterKey: true }).then(function(results) { 
     console.log("inside query.find..."); 
     query.first(null, { useMasterKey: true }).then(function(user) { 
      console.log("inside query.first..."); 
      // Successfully retrieved the object. 
      user.set("emailToken", token); 
      user.save(null, { useMasterKey: true }).then(function() { 
      console.log("inside user.save..."); 
      response.success(); 
      }, function(error) { 
       response.error(error); 
      }); 
      response.success(token); 
     }, 
     function(error) { 
      console.log("error 1..."); 
      response.error(error); 
     }); 
    }, function(error) { 
    console.log("error 2..."); 
    response.error(error); 
    }); 
}); 

ログファイル:

Inside assignTokenToUser 
inside query.find... 
inside query.first... 
^[[32minfo^[[39m: Ran cloud function assignTokenToUser for user undefined with: 
    Input: {"email":"[email protected]"} 
    Result: "tqc8m9lo2tcsrqn69c3q0e1q7f" functionName=assignTokenToUser, [email protected], user=undefined 
inside user.save... 
^[[32minfo^[[39m: Ran cloud function assignTokenToUser for user undefined with: 
    Input: {"email":"[email protected]"} 
    Result: undefined functionName=assignTokenToUser, [email protected], user=undefined 
[object Object] 

Inside assignTokenToUser 
success... 
^[[32minfo^[[39m: Ran cloud function assignTokenToUser for user undefined with: 
    Input: {"email":"[email protected]"} 
    Result: "p66qm34jd80p0j6ne03fe1q7f" functionName=assignTokenToUser, [email protected], user=undefined 
going to send an email... with result: p66qm34jd80p0j6ne03fe1q7f 
fullLink: https://beatthegym.com/[email protected]&token=p66qm34jd80p0j6ne03fe1q7f 
^[[31merror^[[39m: Error generating response. ParseError { code: 206, message: 'Cannot modify user 4m0VZFsKVt.' } code=206, message=Cannot modify user 4m0VZFsKVt. 
[object Object] 

は、だから私は、次のように私のコードを変更するようになりました今、ログファイルはユーザーに「未定義」と表示され、502に変わるまで、Inspectorツールの[Chromeネットワーク]タブに保留中のステータスが表示され、ブラウザによって再度要求が自動的に生成されます。他のすべての要求は正しい200応答を得ます。

ただし、データが保存されているようです。このメールアドレスに対するレコードは正しく生成されたトークンを保存します。しかし、ブラウザからのリクエストは失敗し、元のログファイルでは正しいユーザーIDが表示されますが、ユーザーは「未定義」です...失敗するたびに、ブラウザは別のリクエストを生成するため502)と、それが実際に電子メールを送信することになっていることから、それが何度も何度も実行していることinfinate電子メールを生成し続けている...

は、事前にありがとう...

答えて

0

は最終的に、この理解:

Parse.User.current()メソッドを使用して取得するまで、ユーザーは未定義のままです。データは強制的にレコードに更新されるため、データベースに保存されますが、ユーザーがcurrent()メソッドを使用してauntifyされるまでは、未定義のままです。

+0

最新のコードを投稿してください。私は同じ問題で苦労している – a4arpan

+1

更新されたコードは、私が置いたコードの2番目のチャンクです - それはうまくいきます、つまり、ユーザーがログインしていなくても、それが強制的にレコードを更新しますログファイルに "undefined"があります。 ログインしたユーザーを更新するコードを作成する場合は、current()メソッドを使用する必要があります。 – Meeyam

関連する問題