паспортный токен не авторизуется - PullRequest
0 голосов
/ 22 марта 2019
const JwtStrategy = require('passport-jwt').Strategy,
    ExtractJwt = require('passport-jwt').ExtractJwt;
const User = require('../models/User');
const key = require('./keys').secret;
const mongoose = require('mongoose');

var opts = {}
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
opts.secretOrKey = key;

module.exports = (passport) => {
passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
    console.log(jwt_payload);
    User.findById(jwt_payload.id, function(err, user) {
        if (err) {
            return done(err, false);
        }
        if (user) {
            return done(null, user);
        } else {
            return done(null, false);

        }
    });
}))
}

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

 passport.use(new JwtStrategy(opts, function(jwt_payload, done) 
 console.log(jwt_payload);

Token Stratergy

 const payload = {
                    id: user.id,
                    username: user.username,
                    name: user.name
                }
                const token = jwt.sign(payload, config.secret, { expiresIn: 36000 });
                return res.json({
                    success: true,
                    token: 'JWT ' + token,
                    user: {
                        id: user.id,
                        name: user.name,
                        username: user.username
                    }
                })

И когда я использую это на защищенных маршрутах, он не авторизует защищенные маршруты

Результат = Несанкционированный

router.get('/profile', passport.authenticate('jwt', { session: false }), (req, res) => {
res.send("Profile");
});

1 Ответ

0 голосов
/ 22 марта 2019

Причина, по которой ваша аутентификация не работает, заключается в том, что вы использовали устаревший префикс токена "JWT" ​​и современный экстрактор JWT (fromAuthHeaderAsBearerToken) в качестве опции для своей стратегии.

Вы можете сделать один из шагов, чтобы решить проблему:

  1. изменить префикс токена на 'Bearer ' + token
  2. изменить токен экстрактор:

    opts.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme("JWT");

...