3

我在我的应用程序中使用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,
  });
})

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

4

1 回答 1

2

这里使用 JWT 策略。

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);
        }
    });
}));

返回一个用户,然后当你可以在router.get (or another method)函数中使用时,它会序列化为 json。

于 2019-03-23T19:14:52.090 回答