【问题标题】:passportjs and passportlocal add users "Error: failed to serialize user into session"passportjs 和 passportlocal 添加用户“错误:无法将用户序列化到会话中”
【发布时间】:2012-09-19 03:21:59
【问题描述】:

我已经按照这里的代码 - > https://github.com/jaredhanson/passport-local/tree/master/examples/express3 为用户添加本地身份验证。

问题是当我尝试添加用户时,

所以我创建了这条路线

app.get('/signup', function(req,res){
  res.render('/signup');
});

app.post('/signup', function(req,res){
  var body = req.body;
  users.push(body);
  res.redirect('/');
});

然后页面是表单

form(method='POST', action='/signup')
 input(type='text', name='username', placeholder='username')
 input(type='text', name='password', placeholder='password')
 button.btn Register

虚拟数据库就是例子中的那个

users = [
  {id:1, username: 'test', password:'papapa'}
];

所以当我通过表单发送信息时,一切正常,但是当我尝试使用新创建的用户登录时,告诉我“错误:无法将用户序列化到会话中”

serializeUser 是这个

passport.serializeUser(function(user, done) {
  done(null, user.id);
});

passport.deserializeUser(function(id, done) {
  findById(id, function (err, user) {
    done(err, user);
  });
});

【问题讨论】:

    标签: database node.js authentication express passport.js


    【解决方案1】:

    在 POST /signup 路由中被推送的用户将没有 ID,这是示例序列化代码所期望的。

    把它改成这样,它应该可以工作了。

    app.post('/signup', function(req,res){
      var body = req.body;
      body.id = users.length;
      users.push(body);
      res.redirect('/');
    });
    

    (请注意,这只是一个示例,不推荐用于“真实”应用。)

    【讨论】:

    • 和 w 是管理数据库和添加用户标识的推荐方式?
    • 没有推荐的方法,做任何对你的应用有意义的事情。一个好的开始是使用真实的数据库来持久化数据:)
    • 我找不到一个好的工作示例,看来我必须切换到 raisl 因为数据库集成太容易了
    【解决方案2】:

    我猜你缺少会话序列化程序。看看https://github.com/jaredhanson/passport,“会话”部分。

    基本上,您需要两个函数,将当前用户保存到会话中 (passport.serializeUser) 并将其读回 (passport.deserializeUser)。

    【讨论】:

    猜你喜欢
    • 2019-01-15
    • 2021-03-14
    • 2013-11-25
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 2020-02-04
    相关资源
    最近更新 更多