我目前正在尝试实现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()来打印出护照的内容但是控制台没有写出任何内容。该路由仅返回Unauthorized(Postman),即使确定给定的令牌有效负载是用户数据库中的现有密钥。 所以我的问题是我做错了什么?
答案 0 :(得分:0)
问题是jwt.ExtractJwt.fromAuthHeader()
,由于某些原因它没有识别授权标头,所以这个jwt.ExtractJwt.fromHeader("authorization")
可以工作。