У меня есть 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).