护照序列化和反序列化与JWT

时间:2019-03-23 16:40:47

标签: node.js authentication jwt passport.js cookie-session

我正在将passport-localpassport-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,
  });
})

如果我对我的假设有误,请纠正我。

1 个答案:

答案 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。