2017-11-16 18 views
2

私はバックエンドを使用してOAuth Google Sign Inを実装しています(これは、node.jsで書かれています。フロントエンドはAndroidで、トークンIDをサーバーに送信します。サーバーはトークンIDを正しく受信します。ここで未定義のプロパティ 'getPayload'を読み取ることができません

は(ストレートGoogleドキュメントから食い物にされる)コード

var auth = new GoogleAuth; 
var client = new auth.OAuth2(CLIENT_ID, '', ''); 
    client.verifyIdToken(
     token, 
     CLIENT_ID, 
     // Or, if multiple clients access the backend: 
     //[CLIENT_ID_1, CLIENT_ID_2, CLIENT_ID_3], 
     function(e, login) { 
      var payload = login.getPayload(); 
      var userid = payload['sub']; 
      // If request specified a G Suite domain: 
      //var domain = payload['hd']; 

     }); 

しかし、未定義でログイン倍です。その奇妙なことに、この問題はすべての試行よりも1/10で発生するので、問題の原因を追跡することはできません。他のすべての9月10日それはうまく動作します。

これを解決する方法の提案はありますか?

答えて

2

あなたのコードの問題は、コールバックにエラーが発生していないかどうかをチェックしていないことです。

node.jsのコールバック関数を使用する標準的な方法は、errorが最初、返された実際の(成功した)データが2番目のものであり、エラーが存在する場合には、それはデータを取得するためのものではなく、すべてがうまくいくならば、エラーはヌルになり、データを取得します。

あなたのコードでは、エラーがあることを確認していません(あなたが言うように、必ずしもそうであるとは限りません)。

function(e, login) { 
    if (e) { 
    // handle error here 
    return; // don't continue, you don't have login 
    } 
    // if we got here, login is defined 
    var payload = login.getPayload(); 
    var userid = payload['sub']; 
    // If request specified a G Suite domain: 
    //var domain = payload['hd']; 
}); 
1

コールバック関数への最初のパラメータを処理する必要があるエラーです:
は何かのようにする必要があります。

function(error, login) { 
     if (error) return console.error(error) 
     var payload = login.getPayload(); 
     var userid = payload['sub']; 
     // If request specified a G Suite domain: 
     //var domain = payload['hd']; 

    }); 
関連する問題