如何从战略护照错误创建JSON响应?
我创建具有明确的JSON API和我使用的护照与HTTP承载的策略进行身份验证。
我已经添加passport.authenticate('bearer', {session: false})
中间件。但每当事情是错误的会话它只是用身体未经授权和状态401的实际信息是在WWW-Authenticate
头,以挑战的形式回应,是这样的:
Bearer realm="Users", error="invalid_token", error_description="invalid token"
当这里没有给出认证令牌:
Bearer realm="Users"
我想改变响应为JSON,其中包括错误的信息。
由于我没有很多的经验写东西的后台,我经历过的文档和代码读取。该Bearer strategy只需调用失败,400
还是挑战字符串。基本上有就是我的问题开始,因为我不想写这些挑战字符串,为什么不将此信息作为常规变量传递一个解析器?
在Passport's authenticate middleware这一挑战,然后,根据你的配置,传递给回调,req.flash,会话和/或WWW-Authenticate头。期待通过这个代码,它试图以实际检索challenge.type
和challenge.message
第一。当故障处理没有委托给应用它检查是否挑战是字符串,如果是将其放入WWW身份验证头。这可能是承载策略返回挑战字符串的原因吗?所以,在我的情况也许是有意义的提供一个回调,这样我就可以直接访问这些挑战?但随后仍,承载的挑战是需要分析一个字符串?是人们不使用JSON API的这个承载策略是什么?
在passport
默认的故障响应是在这里:
https://github/jaredhanson/passport/blob/master/lib/middleware/authenticate.js#L174
不过,如果你提供了一个authenticate
callback
它将运行这段代码:
https://github/jaredhanson/passport/blob/master/lib/middleware/authenticate.js#L107
所以,解决的办法是提供一个回调参数authenticate(passport, name, options, callback)
。然后,您可以可以拦截认证失败,并请你向他们作出回应。
需要注意的是res
对象不实际传递给你的回调。你将不得不换您的来电authenticate
像这样回应:
(req, res, next) => {
passport.authenticate('bearer', { /* options */ }, (err, user, challenges, statuses) => {
if (statuses) {
res
.status(401)
.json({
challenges,
statuses,
})
.end();
} else {
next(); // We are authenticated!
}
})(req, res, next);
}
如何从战略护照错误创建JSON响应?
我创建具有明确的JSON API和我使用的护照与HTTP承载的策略进行身份验证。
我已经添加passport.authenticate('bearer', {session: false})
中间件。但每当事情是错误的会话它只是用身体未经授权和状态401的实际信息是在WWW-Authenticate
头,以挑战的形式回应,是这样的:
Bearer realm="Users", error="invalid_token", error_description="invalid token"
当这里没有给出认证令牌:
Bearer realm="Users"
我想改变响应为JSON,其中包括错误的信息。
由于我没有很多的经验写东西的后台,我经历过的文档和代码读取。该Bearer strategy只需调用失败,400
还是挑战字符串。基本上有就是我的问题开始,因为我不想写这些挑战字符串,为什么不将此信息作为常规变量传递一个解析器?
在Passport's authenticate middleware这一挑战,然后,根据你的配置,传递给回调,req.flash,会话和/或WWW-Authenticate头。期待通过这个代码,它试图以实际检索challenge.type
和challenge.message
第一。当故障处理没有委托给应用它检查是否挑战是字符串,如果是将其放入WWW身份验证头。这可能是承载策略返回挑战字符串的原因吗?所以,在我的情况也许是有意义的提供一个回调,这样我就可以直接访问这些挑战?但随后仍,承载的挑战是需要分析一个字符串?是人们不使用JSON API的这个承载策略是什么?
在passport
默认的故障响应是在这里:
https://github/jaredhanson/passport/blob/master/lib/middleware/authenticate.js#L174
不过,如果你提供了一个authenticate
callback
它将运行这段代码:
https://github/jaredhanson/passport/blob/master/lib/middleware/authenticate.js#L107
所以,解决的办法是提供一个回调参数authenticate(passport, name, options, callback)
。然后,您可以可以拦截认证失败,并请你向他们作出回应。
需要注意的是res
对象不实际传递给你的回调。你将不得不换您的来电authenticate
像这样回应:
(req, res, next) => {
passport.authenticate('bearer', { /* options */ }, (err, user, challenges, statuses) => {
if (statuses) {
res
.status(401)
.json({
challenges,
statuses,
})
.end();
} else {
next(); // We are authenticated!
}
})(req, res, next);
}