我在尝试登录我的应用时遇到此错误:
错误:无法将用户序列化为会话
问题是它正在读取参数user.id为undefined。如果我将其更改为用户在数据库登录中的id值。
passport.serializeUser(function(user, done) {
done(null, user.id);
});
有关为什么我将用户值视为未定义的任何想法?
pasport本地登录:
// =========================================================================
// LOCAL LOGIN =============================================================
// =========================================================================
passport.use(
'local-login',
new LocalStrategy({
usernameField : 'username',
passwordField : 'password',
passReqToCallback : true // allows us to pass back the entire request to the callback
},
function(req, username, password, done) {
if(username == "" || password == ""){
return done(null, false, req.flash('loginMessage', 'Please fill in all blank fields to login.'));
}else{
query.login(req, username, password, done);
}
})
);
登录查询:
login: function(req, username, password, done) {
connection.query("SELECT * FROM users WHERE username = ?",[username], function(err, rows){
if (err)
return done(err);
if (!rows.length)
return done(null, false, req.flash('loginMessage', 'Sorry, username/password do not match.')); // req.flash is the way to set flashdata using connect-flash
// if the user is found but the password is wrong
if (!bcrypt.compareSync(password, rows[0].password))
return done(null, false, req.flash('loginMessage', 'Sorry, username/password do not match.')); // create the loginMessage and save it to session as flashdata
// all is well, return successful user
return done(null, rows[0]);
});
}
登录工作直到我更改了数据库中的某些字段名称,但我使用字段的新名称更新了所有查询,因此我不知道发生了什么。
答案 0 :(得分:1)
我发现了问题。由于我在我的数据库中将id的字段名称更改为id_users,因此serializeUser函数如下所示:
passport.serializeUser(function(user, done) {
done(null, user.id_users);
});