【发布时间】:2018-03-20 15:05:14
【问题描述】:
波纹管代码运行良好,但是当授权标头带有来自 php 代码的空令牌(例如-'Authorization: Bearer')时,node.js 应用程序崩溃。我正在使用“passport-azure-ad”节点模块。我检查了 Post man,它验证了令牌,但是当请求来自 php curl 请求时,应用程序崩溃了。原因是,http 标头在“passport-azure-ad”节点模块中设置了两次。我无法捕捉到这个错误。
router.get('/getUser', passport.authenticate('oauth-bearer', {
session: false,
tenantIdOrName: TENANT
}), function (req, token, done) {
// Send response
});
崩溃错误跟踪 - _http_outgoing.js:356 throw new Error('Can\'t set headers after they are sent.'); ^
错误:发送后无法设置标头。 在 \node_modules\passport\lib\middleware\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 );
我该如何处理这个错误,谢谢。
【问题讨论】:
-
当您从 PHP 发送验证令牌而不是空令牌时,它是否有效?您正在开发的
passport-azure-ad是什么版本?确切的 curl 请求代码是什么? -
@FeiXue,感谢您的回复,是的,当我通过 php curl 传递有效或无效令牌时,它工作得很好。我正在使用 3.0.8 版本的“passport-azure-ad”。我用 php 代码编辑了问题。
标签: php node.js azure azure-active-directory passport-azure-ad