Сериализация паспорта и десериализация против JWT - PullRequest
0 голосов
/ 23 марта 2019

Я использую модуль 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,
  });
})

Пожалуйста, поправьте меня, если я ошибаюсь в своем предположении.

1 Ответ

0 голосов
/ 23 марта 2019

Стратегия 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);
        }
    });
}));

Возвращает пользователя, а затем сериализует в json, когда вы можете использовать функцию router.get (or another method).

...