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。使用(策略)
和标题