如何使用passport-jwt正确检查令牌有效负载?

时间:2017-08-17 08:55:53

标签: node.js typescript express jwt passport.js

我目前正在尝试实现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),即使确定给定的令牌有效负载是用户数据库中的现有密钥。 所以我的问题是我做错了什么?

1 个答案:

答案 0 :(得分:0)

问题是jwt.ExtractJwt.fromAuthHeader(),由于某些原因它没有识别授权标头,所以这个jwt.ExtractJwt.fromHeader("authorization")可以工作。