2017-10-09 236 views
1

貝婁代碼運行良好,但是當授權頭帶有來自PHP代碼的空令牌(例如:'Authorization:bearer')時,node.js應用程序會崩潰。我正在使用「passport-azure-ad」節點模塊。我檢查郵政人,它是驗證令牌,但是當請求來自PHP捲曲請求,應用程序崩潰。其原因是,http頭在「passport-azure-ad」節點模塊中設置了兩次。我無法捕捉到這個錯誤。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 拋出新的錯誤( '可以\' 噸設置頭髮送之後「。); ^

錯誤:發送後無法設置標頭。 在\ 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傳遞有效或無效的標記時,它工作正常。我正在使用3.0.8版本的「passport-azure-ad」。我用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-they-are-sent-to-the-client)。 –

相關問題