#node.js #express #jwt #passport.js #passport-jwt
Вопрос:
Я попытался проверить, есть ли в Интернете примеры того, как использовать их JWT extractors
для получения токена из запроса, но я не понял, как отправить token
запрос с запросом после входа пользователя в систему.
Когда я использую Postman, есть вкладка под названием Authorization
, где я могу выбрать тип Bearer Token
, который позволил мне добавить token
с Authorization
помощью, и запрос http://localhost:5000/profile
прошел успешно.
Однако браузер по-прежнему показывает меня только Unauthorized
тогда, когда я пытаюсь получить доступ к профилю http://localhost:5000/profile
после успешного входа в систему.
СНИМОК ЭКРАНА ПОЧТАЛЬОНА:
СНИМОК ЭКРАНА БРАУЗЕРА:
Я следил за конфигурацией документации passpot-jwt:
passport.use(
new JWTStrategy(
{
jwtFromRequest: ExtractJWT.fromAuthHeaderAsBearerToken(),
secretOrKey: "mysecret",
},
function (jwtPayload, done) {
return User.findOne({ username: jwtPayload.username })
.then((user) => {
return done(null, user);
})
.catch((err) => {
return done(err);
});
}
)
);
И мой login
маршрут выглядит так :
Router.post("/", (req, res, next) => {
passport.authenticate("local", { session: false }, (err, user, info) => {
if (err) return next(err);
if (!user) {
return res.redirect("/login?info=" info);
}
req.logIn(user, { session: false }, (err) => {
if (err) return next(err);
const token = jwt.sign({ username: user.username }, "mysecret");
res.json({ user, token: `Bearer ${token}` });
});
})(req, res, next);
});
Комментарии:
1. Вы ожидаете, что браузер автоматически прикрепит заголовок авторизации при перенаправлении?
2. Теперь я хотел сделать это на сервере.
Ответ №1:
Проблема в том, что:
Я пытался получить доступ profile
без добавления Authorization
в header
с самого сервера. В Authorization
нем содержится сгенерированное token
.
С почтальоном я смог сделать это с помощью пользовательского интерфейса, как описано выше. Однако в коде мне нужно было создать промежуточное программное обеспечение перед доступом к profile
маршруту.
app.use(
"/profile",
(req, res, next) => {
req.headers.authorization = `Bearer ` req.cookies["authentication-token"];
next();
},
profileRouter
);