我正在尝试将passportjs与node.js和mysql一起使用。
我得到这个错误:
无法从会话中反序列化用户
在注册码中,我有:
app.post("/register", function(req, res){
var hash = bcrypt.hashSync(req.body.password);
var q = "INSERT INTO users (username, email, hash) VALUES ('" + req.body.username +"','" + req.body.email +"','"+ hash +"')";
connection.query(q, function(err, result) {
if (err){
res.redirect("/register");
}else{
connection.query('SELECT * FROM users WHERE id = LAST_INSERT_ID()',
function(err, result){
var user = result[0];
req.login(user, function(err){
res.redirect('/');
});
});
}
});
});
在localstrategy中,我有:
passport.use(new LocalStrategy(
function(username, password, done) {
var q = "SELECT username AS username, hash AS hash, id AS id FROM users WHERE username ='"+ [username] +"'";
connection.query(q, function(err, result) {
var hash = result[0].hash;
var isValid = bcrypt.compareSync(password, hash);
if (err) throw err;
if (isValid){
//redirect back to index
return done(null,{user:result[0]});
} else {
return done(null,false);
}
});
}
));
我相信这就是我要出错的地方,但我不知道,在序列化和反序列化中,我有这样一个问题:
passport.serializeUser(function(user, done) {
done(null, user.id);
}); //store id in session
passport.deserializeUser(function(id, done) {
connection.query("SELECT * FROM users WHERE id ='"+id+"'",function(err,rows){
done(err, rows[0]);
});
});
1条答案
按热度按时间1wnzp6jl1#
经过两天的努力我终于弄明白了。在用户注册中,我应该像这样将用户id存储为一个变量
以及用户登录的localstrategy
我是新来的,我谷歌:了解护照序列化反序列化。后来我发现了这个帖子,非常有帮助。
希望这能帮助别人。