最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

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

IT培训 admin 11浏览 0评论

如何从战略护照错误创建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.typechallenge.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.typechallenge.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);
}
发布评论

评论列表 (0)

  1. 暂无评论