Паспорт JWT не авторизован после входа в систему - PullRequest
0 голосов
/ 11 июня 2018

Мое приложение с passport-JWT не хочет работать должным образом, так как после входа в систему я вижу только

Несанкционированный

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

fromAuthHeaderAsBearerToken => fromAuthHeaderWithScheme('jwt')

, но все равно это не работает.после входа я не вижу новых файлов cookie, установленных в моем браузере, или что-то в этом роде.Где проблема может быть?Главное, что я даже не могу достать и напечатать console.trace(jwtPayload); на своем Passport.js:

const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;

const passportJWT = require("passport-jwt");
const ExtractJwt = passportJWT.ExtractJwt;
const JWTStrategy = passportJWT.Strategy;

const models = require('../models/index');

passport.use(new LocalStrategy({
    usernameField: 'name',
    passwordField: 'password'
}, (user, password, cb) => {
    return models.User.findOne({
        attributes: ['id', 'user_password', 'user_name'],
        where: {user_name: user}
    }).then(User => {
        if (!User) return cb(null, false, {message: 'No matching results for such a user.'});
        return User.validPassword(password).then(result => {
            if (result !== true) return cb(null, false, {message: 'Invalid password for selected user'});
            return cb(null, User.get({plain: true}), {
                message: 'Logged In Successfully'
            });
        })
    }).catch(err => {
        return cb(err);
    });
}));

let options = {};
options.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme('jwt');
options.secretOrKey = 'token';
options.expiresIn = (86400 * 30);
console.log(options);

passport.use(new JWTStrategy(options, function(jwtPayload, cb){
    console.trace(jwtPayload);
    return models.User.findOneById(jwtPayload.id).then(User => {
        console.log(User);
        if (User) {
            return cb(null, User.get({plain: true}));
        } else {
            return cb(null, false);
        }
    }).catch(err => {
        return cb(err);
    });
}));

, а также мой маршрутизатор для обработки аутентификации

router.post('/doAuth', function (req, res, next) {

passport.authenticate('local', {session: false}, (err, user, info) => {
    if (err || !user) {
        return res.json({
            message: info ? info.message : 'Login failed',
            status: 'error'
        });
    }

    req.login(user, {session: false}, (err) => {
        if (err) {
            res.json({
                message: err,
                status: 'error'
            });
        }

        const token = jwt.sign(user, 'token', {expiresIn: 86400 * 30});
        return res.json({
            message: 'Logged In Successfully!',
            redirect: '/dashboard',
            token: 'jwt ' + token,
            success: true,
            user: {
                id: user.id,
                name: user.user_name
            }
        });
    });
})
(req, res);

});

, поэтому после входа в систему меня перенаправляют на /dashboard, как и должно быть, но тамЯ вижу только Несанкционированный.Также в моем app.js я использую authenticate.

const passport = require('passport');
require(Paths.Helpers + 'Passport');

app.use('/dashboard', passport.authenticate('jwt', {session: false}), userRouter);

1 Ответ

0 голосов
/ 12 июня 2018

Я вижу, что вы используете fromAuthHeaderWithScheme для проверки токена.Согласно readme,

создает новый экстрактор, который ищет JWT в заголовке авторизации, ожидая, что схема будет соответствовать auth_scheme.

Это означает, что когда вы получаететокен при входе в систему с /login необходимо указать его /dashboard в заголовке авторизации запроса.Включает ли ваш запрос токен jwt в заголовок?

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