我正在使用节点js(express和mysql)创建一个应用,尝试使用本地护照进行身份验证。当我单击登录时,一切运行良好,但是在比较凭据成功后,重定向无法正常工作(继续加载)。但是如果凭据不匹配,则故障重定向可以正常进行,没有任何错误。
怎么了?哪里?谁能帮忙找出来?请...
我的登录路线:
router.post('/login', (req, res, next) => {
console.log('post login.'); //never logged, why?
passport.authenticate('local', {
successRedirect: '/admin/dashboard',
failureRedirect: '/login',
failureFlash: true
})(req, res, next);
});
护照配置:
const LocalStrategy = require('passport-local').Strategy;
const bcrypt = require('bcrypt');
// Load User model
const User = require('../config/db').User;
module.exports = function(passport) {
passport.use(
new LocalStrategy({usernameField: 'email', passwordField: 'password' }, (username, password, done) => {
// Match user
User.findOne({where: {email: username}}).then(user => {
console.log(user.name); //logged user name.
if (!user) {
return done(null, false, { message: 'That email is not registered' });
}
// Match password
const isMatched = bcrypt.compareSync(password, user.password);
if (isMatched) {
console.log('password matched.'); //logged when password matched.
return done(null, user);
} else { console.log('password not matched.'); //logged when password not matched.
return done(null, false, { error_msg: 'Password incorrect' });
}
});
})
);
passport.serializeUser(function(user, done) {
console.log('serialized: ', user.id); //logged when credentials matched.
return done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findByPk(id, function(err, user) {
console.log('deserialized');
return done(null, user.id);
});
});
};
答案 0 :(得分:0)
经过几个小时的搜索,我找到了解决方案,这里的问题出在deserializeUser方法中。 我只是在deserializeUser中更改了一些代码,因为: passport无法在会话之外反序列化用户。
它对我来说效果很好,我希望它能对像我这样的问题的人起作用。
passport.deserializeUser(function(user, done) {
return done(null, user);
});