我创建具有明确的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头。期待通过这个代码,它试图以实际检索
在passport
默认的故障响应是在这里:
github/jaredhanson/passport/blob/master/lib/middleware/authenticate.js#L174
不过,如果你提供了一个authenticate
callback
它将运行这段代码:
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);
}
本文发布于:2024-04-12 05:41:40,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/1713179848208663.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |