@E-em

Не могу понять ошибку при авторизации nodejs express jwt passport?

Всем привет, разбираюсь потихоньку нодой и с тем как сделать нормальную авторизацию jwt + passport,

осталась одна ошибка: если правильно ввожу данные и делаю запрос на /login, выдает токен, потом когда пытаюсь сделать get запрос на адрес который требует токен, я получаю 401 Unauthorized хотя добавляю Authorization хедер с токеном

Паспорт
const JwtStrategy = require('passport-jwt').Strategy;
const ExtractJwt = require('passport-jwt').ExtractJwt;
const User = require('../models/user');
const config = require('./index');

module.exports = function(passport) {
    const jwtOptions = {
        jwtFromRequest: ExtractJwt.fromAuthHeader(),
        secretOrKey: config.secret
    };
    passport.use(new JwtStrategy(jwtOptions, function(payload, done) { 
        User.findById(payload.id, (error, user) => {
            if (error) {
                return done(error);
            }

            if (user) {
                return done(null, user);
            } else {
                return done(null, false);
            }

        });
    }));
}
  • Вопрос задан
  • 574 просмотра
Решения вопроса 2
@emp1re
По первой ошибке все просто, я все не искал но вот
if (!user) response.json({ status: 400, message: 'User not found' });

Нужно выходить из функции т.е. делать return, ошибка говорит что ты пытаешься сделать response после того как он уже был сделан. Ищи места где ты на if делаешь 2 разных респонса.

По второму вопросу, не вижу serialize/deserialize суть паспорта, что он тебе в тело req достает юзера из базы, посмори если у тебя req.user если нету, то тебе нужно deserialize и затем через serialize будет проверяться и сессия и юзер.
Ответ написан
@E-em Автор вопроса
сработало когда в header Authorization добавил не просто токен, а с приставкой JWT то есть вот так https://prnt.sc/ftmrr1
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы