如何从战略护照错误创建JSON响应?

阅读: 评论:0

如何从战略护照错误创建JSON响应?

如何从战略护照错误创建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头。期待通过这个代码,它试图以实际检索第一。当故障处理没有委托给应用它检查是否挑战是字符串,如果是将其放入WWW身份验证头。这可能是承载策略返回挑战字符串的原因吗?所以,在我的情况也许是有意义的提供一个回调,这样我就可以直接访问这些挑战?但随后仍,承载的挑战是需要分析一个字符串?是人们不使用JSON API的这个承载策略是什么?

回答如下:

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小时内删除。

标签:护照   错误   战略   JSON
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23