Node.js 如何在passport jwt中获取rawJWT字符串?
我正在使用Express.js、Passport.js。Jsonwebtoken我将JWT编码的令牌保存在数据库中 我想检查加密的JWT与持有人 JwtStrategy允许我们接收jwtPayload对象 但是我需要一个加密的字符串。 文档中包含rawJwt,但是如何获得加密字符串?如何提取Node.js 如何在passport jwt中获取rawJWT字符串?,node.js,express,jwt,passport.js,passport-jwt,Node.js,Express,Jwt,Passport.js,Passport Jwt,我正在使用Express.js、Passport.js。Jsonwebtoken我将JWT编码的令牌保存在数据库中 我想检查加密的JWT与持有人 JwtStrategy允许我们接收jwtPayload对象 但是我需要一个加密的字符串。 文档中包含rawJwt,但是如何获得加密字符串?如何提取 passport.use(new JwtStrategy({ jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), se
passport.use(new JwtStrategy({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey : config.secretOrKey
},
function (jwtPayload, cb) {
return User.find({_id: jwtPayload.user._id, token: token})// compare the token that goes in encrypted form
.then(user => {
return cb(null, user);
})
.catch(err => {
return cb(err);
});
}
) 您可以创建自定义提取器函数
const jwtExtractor = (req) => {
let token = null;
if (req && req.headers) {
let tokenParts = req.headers.authorization.split(' ');
// tokenParts tokenParts[0] is schema and tokenParts[1] is credentials
// test matching schema
if (/^Bearer$/i.test(tokenParts[0])) { // use your own schema instead of Bearer
token = tokenParts[1];
}
}
// Declare token globally to use it out side the function, eg: as `Bearer ${token}` or as token
// or you can store it to another global variable, eg: jwtString = req.headers.authorization
return token;
};
并作为jwtFromRequest传递:jwtExtractor
有关更多详细信息,请参阅
let opts = {};
opts.jwtFromRequest = jwtExtractor;
opts.secretOrKey = 'secret';
module.exports = (passport) => {
passport.use(
new JWTStrategy(opts, (jwtPayload, done) => {
UserModel.findOne({_id: jwtPayload.id})
.then((user) => {
// Here you can check the token with the stored token in DB
if (user && user.jwtToken === `Bearer ${token}`) {
return done(null, jwtPayload);
} else return done(null, false);
})
.catch((err) => {
return done(null, false);
});
})
);
};