Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database passportjs和passportlocal添加用户”;错误:无法将用户序列化到会话中;_Database_Node.js_Authentication_Express_Passport.js - Fatal编程技术网

Database passportjs和passportlocal添加用户”;错误:无法将用户序列化到会话中;

Database passportjs和passportlocal添加用户”;错误:无法将用户序列化到会话中;,database,node.js,authentication,express,passport.js,Database,Node.js,Authentication,Express,Passport.js,我遵循了这里的代码->为用户添加本地身份验证 问题是当我尝试添加用户时 所以我创建了这条路线 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='PO

我遵循了这里的代码->为用户添加本地身份验证

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

所以我创建了这条路线

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'}
];
因此,当我通过表单发送信息时,一切正常,但当我尝试使用新创建的用户登录时,会告诉我“错误:无法将用户序列化到会话”

用户是这样的

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

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

我猜您缺少会话序列化程序。请参阅“会话”部分


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

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

把它改成这样,它应该会工作

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

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

我遵循了这个示例->,因此方法是存在的。我必须用我的方法给他们打电话?app.post(“/signup”…???不,您不需要直接调用它们,只需将函数提供给passport。[de]serializeUser()。但是,我仍然认为您的序列化函数有问题。查看passport代码(),当没有序列化器()时会触发该错误函数已注册。我添加了序列化的方法,w是管理数据库和添加用户标识的推荐方法?没有推荐的方法,请执行对应用程序有意义的操作。一个好的开始是使用真实数据库来持久化数据:)我找不到一个很好的示例,看来我将不得不切换到raisl,因为数据库集成非常简单