如何使用passport-jwtvalidation路由?

我正在使用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) 

所以,当我POST到/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"); }) 

我的头有Authorization: JWT [token]

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

您的授权标头格式不正确。 根据jwt-strategy文档

fromAuthHeaderAsBearerToken()创build一个新的提取器,在授权头中寻找JWT,scheme“承载者”

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