【问题标题】:Error: Failed to deserialize user out of session错误:无法将用户反序列化出会话
【发布时间】:2018-01-06 11:05:52
【问题描述】:

我正在尝试将 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]);
        });

}); 

【问题讨论】:

    标签: mysql node.js passport.js


    【解决方案1】:

    经过 2 天的尝试修复后,我终于弄明白了。 在用户注册中,我应该将用户 ID 存储为这样的变量

       var user = result[0].id; 
         req.login(user, function(err){
           res.redirect('/');
        });
    

    以及在用户登录的localstrategy中

    var user = result[0].id;
    return done(null,user);
    

    我是新手,我用谷歌搜索:了解护照序列化反序列化。 然后我找到了this post,它很有帮助。
    希望这对其他人有帮助。

    【讨论】:

      猜你喜欢
      • 2018-10-22
      • 2017-11-05
      • 2021-03-14
      • 2013-11-25
      • 1970-01-01
      • 2019-03-26
      • 2014-12-12
      • 2021-09-11
      • 2012-09-19
      相关资源
      最近更新 更多