Токен JWT не проверяется только при первой записи - PullRequest
0 голосов
/ 09 мая 2020

У меня есть backend API для обработки пользователей с JWT и passsport, используя Node.js и Express. Интерфейс находится на Vue, и все работает нормально, за исключением тех случаев, когда новый пользователь входит в систему, бэкэнд-аутентификатор, похоже, получает jwt_payload с идентификатором (который должен быть идентификатором пользователя), который никому не соответствует. После обновления страницы jwt_payload неожиданно получает правильный идентификатор и может найти пользователя. Ниже приведен код для аутентификатора и стратегии JWT:

JWTStrategy:

module.exports = passport => {
        passport.use(
            new JwtStrategy(opts, (jwt_payload, done) => {
                User.findById(jwt_payload.id)
               .then(user => {
                    if(user) return done(null, user);
                    return done(null,false);
                })
                .catch(err =>{
                    return done(err, false, {message:"Hubo un error en el servidor"});
                });
            })
        );
    };

Authenticator:

module.exports = (req,res,next) => {
        passport.authenticate("jwt", function(err,user,info){
            if(err) return next(err);
            if(!user) return res.status(401).json({message:"Acceso denegado - No token"});

            req.user = user;

            next();
        })(req,res,next);
};

Я следовал руководству по настройке jwt аутентификации и авторизации, пользователи могут войти в реестр как обычно. Если это полезно, интерфейс Vue проверяет токен jwt в localStorage в качестве второго барьера для авторизации на домашней странице, при открытии домашней страницы (которая имеет данные, которые зависят от текущего пользователя), я получаю этот 401 из аутентификатор. Я использую vue маршрутизатор для pu sh домашней страницы, когда пользователь входит в систему (вход в систему сохраняет токен jwt в localStorage).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...