Как передать данные jwtPayload, декодированные Passport, в API nodejs - PullRequest
1 голос
/ 31 мая 2019

Я использую эту паспортную стратегию.

  passport.use(
    'onlyForRefreshToken',
    new JWTStrategy(
      {
        jwtFromRequest: ExtractJWT.fromAuthHeaderAsBearerToken(),
        secretOrKey: jwtSecretRider,

      },
      (jwtPayload, done) => {

        if (jwtPayload) {
          return done(null, jwtPayload); 
        }
        return done(null, false);
      },
    ),
  );

Моя цель - поместить jwtPayload в мой оставшийся API Nodejs, который находится в другой папке.
То есть я хочу использовать jwtPayload, декодированный по коду ниже.

exports.riderRefreshToken = async (req, res) => {
    const { email } = req.body;

    const exRiderRefreshToken = await Rider.findOne({ email });
}


И этот роутер работает на промежуточном программном обеспечении jwtstrategy.

router.post(
  '/refreshToken',
  passport.authenticate('onlyForRefreshToken', { session: false }),
  authenticationCtrl.riderRefreshToken,
);

В заключение, когда JWT без проблем переходит от jwtstrategy, этот маршрутизатор Post будет работать.
И я хочу использовать jwtPayload из jwtstrategy в Nodejs API как req.params или req.body.

Не могли бы вы помочь мне с этой проблемой?

1 Ответ

1 голос
/ 31 мая 2019

Вам нужно заключить вашу стратегию в функцию, которая получает req и res:

const isAuthenticated: RequestHandler = (req, res, next) => {
  passport.authenticate(
    'jwt',
    { session: false, failWithError: true },
    (error, user) => {
      if (error) {
        return next(error)
      }

      //HERE PUT USER WHERE YOU WANT
      //req.data or req.user or req.userInfo
      req.user = user

      return next()
    }
  )(req, res, next)
}

Я не рекомендую помещать пользователя в req.params или req.body, поскольку это можетпозже запутаться (потому что технически это не из-за них).

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