Мое приложение с 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);