Я использую JWT
, работая с passport.js
для аутентификации.У меня есть local strategy
, который регистрируется, и другой, который входит в систему пользователя.В настоящее время он возвращает токен, выполнив:
req.login(user, {session: false}, (err) => {
if (err) {
res.send(err);
}
var jwtUser = {
_id: user.id,
email: user.email
};
const token = jwt.sign(jwtUser, config.passport.jwtSecret);
return res.json({jwtUser, token});
});
Это возвращает объект, подобный:
{"jwtUser":
{
"_id":"5c55f0be9ddcf71a704d92b2",
"email":"john.doe@example.com"
},
"token":"<token>" // redacted this because it contains my personal email
}
Итак, я получаю токен, который верен (я проверилиспользуя онлайн-декодер, он дает правильный идентификатор пользователя и правильный адрес электронной почты).
Когда я использую этот маршрут, чтобы попытаться проверить, работает стратегия JWT или нет, я получаю сообщение о несанкционированном доступе 401.
Вот моя стратегия JWT
var opts = {};
opts.jwtFromRequest = ExtractJWT.fromAuthHeaderAsBearerToken();
opts.secretOrKey = config.passport.jwtSecret;
passport.use('jwt', new JWTstrategy(opts, function(jwt_payload, done) {
console.log('payload received: ', jwt_payload);
User.findOne({id: jwt_payload.id}, function(err, user) {
console.log('User: ', user);
if (user) {
console.log(user);
return done(null, user);
}
if (err) {
return done(err, false);
}
});
}));
Мой маршрут
router.get('/auth/test', passport.authenticate('jwt', { session: false }), (req, res) => {
res.send('You reached a private route.');
});
Моя локальная стратегия работает с использованиемтот же метод вызова паспорта.
Я думаю, что я включил все ценное, если что-то отсутствует, скажите, пожалуйста, и я обновлю ОП с ним.
Я должен отметить, что я использую почтальоначтобы проверить это и использовать метод авторизации токена на предъявителя.
Заранее спасибо!