Как отправить/извлечь токен JWT в nodejs с паспортом-jwt?

#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
    );