Node js passport本地身份验证正在加载中



我正在用node js(express和mysql(创建一个应用程序,试图用passport local进行身份验证。当我点击登录时,一切运行良好,但在比较凭据后,成功重定向不起作用(继续加载(。但如果凭据不匹配,则故障重定向工作正常,没有任何错误

怎么了?哪里有人能帮忙查一下吗?请

我的登录路径:

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);
});

passport配置:

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);
});
});
};

经过几个小时的谷歌搜索,我找到了一个解决方案,这里的问题是反序列化用户方法。我只是在反序列化用户中更改了一点代码,因为:passport无法在会话外反序列化用户

它对我很有效,我希望它能对像我这样有问题的人有效。

passport.deserializeUser(function(user, done) {
return done(null, user);
});

反序列化时,输入Id,您将返回用户对象。喜欢这个吗

passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
console.log('deserialized');
return done(null, user);
});
});

最新更新