не может получить доступ к защищенному маршруту с помощью passport-jwt - PullRequest
0 голосов
/ 01 апреля 2019

Я не могу аутентифицировать секретный ресурс, я все еще звоню с токеном входа, и каждый раз получаю несанкционированный ответ.

  passport.use(
  new JwtStrategy(
    {
      jwtFromRequest: ExtractJwt.fromHeader("Authorization"),
      secretOrKey: jwtSecret
    },
    async (payload, done) => {
      try {
        const user = await User.findById(payload.sub);
        console.log(payload.sub);
        if (!user) {
          return done(null, false);
        }
        done(null, user);
      } catch (error) {
        done(error, false);
      }
    }
  )
);

controllers / users.js:

const signToken = user => {
  return jwt.sign(
    {
      iss: "nikname",
      iat: new Date().getTime(),
      sub: user._id,
      exp: new Date().setTime(new Date().getDate() + 1)
    },
    jwtSecret
  );
};

route:

router.route('/secret')
.get(passport.authenticate('jwt',{session: false}),usersController.secret);

Я не могу выяснить проблему, поскольку ошибка неясна.любая помощь ?Большое спасибо

1 Ответ

0 голосов
/ 03 апреля 2019

после использования отладчика jwt оказалось, что была проблема с полезной нагрузкой, хотя отладчик показывал проверенный знак токена, но 'exp' и 'iat' показывали неправильные даты, поэтому я изменил константу signToken следующим образом:

    const signToken = user => {
  return jwt.sign(
    {
      iss: "nikname",
      sub: user.id,
    },
    jwtSecret,
    {
      expiresIn: '2d'
    }
  );
};

также после исследования выяснилось, что fromHeader (экстрактор) плохо функционирует в passport-jwt@4.0.0, поэтому вместо этого я использовал fromAuthHeaderWithScheme.Вот так:

jwtFromRequest: ExtractJwt.fromAuthHeaderWithScheme('JWT'),

и теперь все работает просто отлично.

...