Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用passport jwt验证路由?_Node.js_Express_Jwt_Passport.js - Fatal编程技术网

Node.js 如何使用passport jwt验证路由?

Node.js 如何使用passport jwt验证路由?,node.js,express,jwt,passport.js,Node.js,Express,Jwt,Passport.js,我使用的是passport jwt,我的策略设置如下: let jwtOptions = {} jwtOptions.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken() jwtOptions.secretOrKey = process.env.SECRET var strategy = new JwtStrategy(jwtOptions, function (jwt_payload, next) { co

我使用的是
passport jwt
,我的策略设置如下:

  let jwtOptions = {}
  jwtOptions.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken()
  jwtOptions.secretOrKey = process.env.SECRET

  var strategy = new JwtStrategy(jwtOptions, function (jwt_payload, next) {
    console.log('payload received', jwt_payload);
    // usually this would be a database call:
    var user = users[_.findIndex(users, { id: jwt_payload.id })];
    if (user) {
      next(null, user);
    } else {
      next(null, false);
    }
  })
  passport.use(strategy)
因此,当我发布到
/login
路线时,我能够生成一个令牌:

  var payload = { id: user.id }
  var token = jwt.sign(payload, jwtOptions.secretOrKey)
  res.json({ message: "ok", token: token })
但当我尝试使用需要令牌的路由时:

  app.get("/secret", passport.authenticate('jwt', { session: false }), (req, res) => {
    res.json("Success! You can not see this without a token");
  })
我的头具有
授权:JWT[token]


它不断返回一个
401
。我做错了什么?

您的授权标题格式不正确。根据

fromAuthHeaderAsBearerToken()
创建一个新的提取器,该提取器使用方案“bearer”在授权标头中查找JWT


所以您的头应该是Authorization:Bearer[token]

如果您在头中发送令牌并使用您自己的方案(在您使用“JWT”的情况下),您可以使用fromAuthHeaderWithScheme(auth\u方案)方法

您可以在passport jwt文档中找到更多详细信息:

  • fromAuthHeaderWithScheme(auth_scheme)创建一个新的提取器,在授权标头中查找JWT,期望方案与auth_scheme匹配
  • fromAuthHeaderAsBealerToken()创建一个新的提取器,该提取器使用方案“bearer”在授权标头中查找JWT

如果不在此处显示,您是否调用过passport。请在JwtStrategy实例中使用(策略)?另外,显示如何格式化在
GET/secret
request@Paul-更新。我使用的是
passport。使用(策略)
和标题