我正在将passport-local
,passport-jwt
模块用于我的应用程序中的身份验证策略。我试图了解我是否仍需要使用passport.serialize()
和passport.deserialize()
方法。据我了解,这些方法使用会话来存储用户信息。我怀疑使用JwtStrategy
已经达到使用这些方法的目的。还是我在这里完全错了?
我尝试查看网络,但是在那里找不到很多信息。
这是我的JWT策略代码
router.get('/current', passport.authenticate('jwt', {session: false}), (req, res) => {
res.json({
id: req.user.id,
email: req.user.email,
first_name: req.user.first_name,
last_name: req.user.last_name,
});
})
如果我对我的假设有误,请纠正我。
答案 0 :(得分:0)
此处使用JWT策略。
Versions:
expo: 32.0.0,
expo-cli: 2.2.0,
react-native-maps: 0.23.0
此代码是中间件,该中间件从请求标头的授权中获取令牌密钥,然后检查令牌密钥是否正确并触发passport.authenticate('jwt', {session: false})
方法。
然后,您的代码(我想就是这样):
passport.use(new JwtStrategy(opts, (jwt_payload, done)
返回用户,然后可以在passport.serializeUser(function (user, done) {
done(null, user);
});
passport.deserializeUser(function (user, done) {
done(null, user);
});
// jwt
let opts = {
jwtFromRequest: ExtractJwt.fromAuthHeaderWithScheme('jwt'),
secretOrKey: "secret"
};
passport.use(new JwtStrategy(opts, (jwt_payload, done) => {
UserRepository.get_user_by_id(jwt_payload.user.id, (err, user) => {
if (err) {
return done(err, false);
}
if (user) {
return done(null, UserRepository.set_existing_user_for_token_key(user));
} else {
return done(null, false);
}
});
}));
函数中使用时将其序列化为json。