passportjs和passportlocal添加用户"错误:无法将用户序列化为会话"

Non*_*yck 3 database authentication node.js express passport.js

我已经按照这里的代码 - > 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('/');
});
Run Code Online (Sandbox Code Playgroud)

那么页面就是它的形式

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

虚拟DB这是示例中的那个

users = [
  {id:1, username: 'test', password:'papapa'}
];
Run Code Online (Sandbox Code Playgroud)

因此,当我发送表单信息时,一切正常,但当我尝试使用新创建的用户登录时,告诉我"错误:无法将用户序列化为会话"

serializeUser就是这个

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

passport.deserializeUser(function(id, done) {
  findById(id, function (err, user) {
    done(err, user);
  });
});
Run Code Online (Sandbox Code Playgroud)

Jar*_*son 5

在POST /注册路由中被推送的用户将没有ID,示例序列化代码需要该ID.

把它改成这样的东西,它应该工作.

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

(请注意,这仅是一个示例,不建议用于"真实"应用.)