我目前正在尝试实现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()来打印passport得到的内容,但是console没有写出任何内容。路由只返回未经授权的(Postman),即使我确定给定的令牌有效负载是用户数据库中的现有密钥。所以我的问题是我做错了什么?
发布于 2017-08-23 19:35:56
问题出在jwt.ExtractJwt.fromAuthHeader()上,由于某种原因,它不能识别授权标头,所以这个jwt.ExtractJwt.fromHeader("authorization")可以正常工作。
https://stackoverflow.com/questions/45730671
复制相似问题