2017-10-09 32 views
1

ベローズコードは機能しますが、承認ヘッダーにPHPコードの空のトークン(Eg- 'Authorization:bearer')があると、node.jsアプリケーションがクラッシュします。私は "passport-azure-ad"ノードモジュールを使用しています。私はPost manとチェックして、トークンを検証しますが、リクエストがPHPのcurlリクエストから来たとき、アプリケーションはクラッシュします。この理由は、 "passport-azure-ad"ノードモジュールでhttpヘッダーが2回設定されているためです。私はこのエラーをキャッチできませんでした。Microsoft Azure Active Directory Passport認証

router.get('/getUser', passport.authenticate('oauth-bearer', { 
    session: false, 
    tenantIdOrName: TENANT 
}), function (req, token, done) { 
    // Send response 
}); 

クラッシュエラートレース - _http_outgoing.js:356 スロー新しいError(。それらが送られた後、tはヘッダーを設定\ 'できます' '); ^

エラー:送信後にヘッダーを設定できません。 \ node_modulesで \パスポート\ libに\ミドルウェア\ authenticate.js:156:13)

PHPコード=>

$headers = array ('Authorization: bearer ' . $Requestheader['id_token']); 
$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt ($ch, CURLOPT_URL, 'http://serverhost/auth/getUser'); 
curl_setopt ($ch, CURLOPT_HTTPHEADER, $headers); 
return curl_exec ($ch); 

私は私の側からこのエラーを処理するにはどうすればよい、ありがとうございます。

+1

あなたはPHPから検証トークンの代わりに、空のトークンを送信するときに、それが動作しましたか?あなたが開発していた 'passport-azure-ad'のバージョンは何ですか?正確なカール要求コードは何ですか? –

+0

@FeiXue、ありがとう、はい、PHP curlで有効または無効なトークンを渡すと完全に動作しています。私は "passport-azure-ad"の3.0.8バージョンを使用しています。私はPHPコードで質問を編集しました。 – Sudharshan

答えて

0

Node.jsはa single threadで実行されていますが、エラーが処理されないとクラッシュします。ここではNode.jsの中で例外処理について非常に有用であるスレッド:

Node.js Best Practice Exception Handling

+0

はい、私たちは全体的にエラーを捕まえることができますが、私は正確な場所でエラーをキャッチするために探しています。 – Sudharshan

+0

[WebAPI-Bearer-NodeJS](https://github.com/AzureADQuickStarts/WebAPI-Bearer-NodeJS/blob/master/node-server/app.js)を使用して問題を再現しようとしていますが、失敗しました。コードサンプルは、トークンが提供されているかどうかにかかわらずクラッシュしません。また、エラーメッセージに基づいて、応答が送信された後にアプリケーションがヘッダーを設定したように見えます。同じエラーメッセージについて[このスレッド](https://stackoverflow.com/questions/7042340/error-cant-set-headers-after-the-are-sent-to-the-client)を参照してください。 –

関連する問題