如何使用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]