如何使用 passport-jwt 正确检查令牌有效负载?
Posted
技术标签:
【中文标题】如何使用 passport-jwt 正确检查令牌有效负载?【英文标题】:How to correctly check tokens payload with passport-jwt? 【发布时间】:2018-01-25 14:33:50 【问题描述】:我目前正在尝试实现passport-jwt,并且我有一个方法可以使用jwt-simple 创建我的令牌,其中包含用户的密钥。
async createToken(u: string, p: string)
let user = await this.us.model.findOne('key': u)
if (user.key == u)
let payload = 'key': u
let token = jwt.encode(payload, "Banana")
return token;
我手动将其放入邮递员令牌并尝试获取此路线。我正在使用pleerock/routing-controllers @UseBefore 在到达方法之前调用中间件。
@Get("/test")
@UseBefore(passport.authenticate("jwt", session: false ))
test(@Res() response: Response)
response.send("Test done.")
这是我如何设置passport-jwt的策略
let OPTJWT =
secretOrKey: 'Banana',
jwtFromRequest: jwt.ExtractJwt.fromAuthHeader()
passport.use(new jwt.Strategy(OPTJWT, async ( jwt_payload, done) =>
console.log(jwt_payload)
let user = await mongoose.model("users").findOne('key': jwt_payload.key);
console.log(user)
if (user)
return done(null,
key: jwt_payload.key
);
else
console.log("User not found")
return done(new Error("User not found"), null);
));
app.use(passport.initialize())
我输入了 console.log() 以打印出护照得到的内容,但控制台没有写出任何内容。即使我确定给定的令牌有效负载是用户数据库中的现有密钥,该路由也只会返回未经授权的 (Postman)。 所以我的问题是我做错了什么?
【问题讨论】:
你初始化护照了吗? 我更新了我的样本,是的,我更新了 你在没有任何装饰的情况下测试过它吗?只是简单的表达。 装饰是我的路由,删除它然后设置快递不是我正在寻找的解决方案 我知道这不是你要找的,只是为了测试,使用 express(很容易设置)。这将帮助您解决问题。 【参考方案1】:问题是jwt.ExtractJwt.fromAuthHeader()
,由于某种原因它无法识别授权标头,所以这个jwt.ExtractJwt.fromHeader("authorization")
有效。
【讨论】:
以上是关于如何使用 passport-jwt 正确检查令牌有效负载?的主要内容,如果未能解决你的问题,请参考以下文章
我在我的 nestJS 应用程序(使用 authGuard)中使用了 passport-jwt 身份验证策略,如何访问我的控制器中的令牌有效负载?
如何在 passport-jwt 中获取 rawJWT 字符串?