错误:无法将用户序列化为会话

use*_*925 164 login node.js express passport-local passport.js

你好护照模块和快递有问题.

这是我的代码,我只想在第一次尝试时使用硬编码登录.

我总是得到这样的信息:

我搜索了很多,并在stackoverflow中发现了一些帖子,但我没有得到失败.

__CODE__

我的代码看起来像这样.

Error: failed to serialize user into session
    at pass (c:\Development\private\aortmann\bootstrap_blog\node_modules\passport\lib\passport\index.js:275:19)
Run Code Online (Sandbox Code Playgroud)

rob*_*lep 328

看起来你没有实现passport.serializeUserpassport.deserializeUser.尝试添加此:

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

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

  • @schlenger它取决于你如何实现序列化.有时你按用户id序列化,这意味着`serializeUser`函数只在会话中存储用户id,而`deserializeUser`使用该id从数据库中检索用户数据(例如).这是为了防止会话存储本身包含实际的用户数据. (8认同)
  • 为我工作.为什么我不必在其他地方使用'id'部分? (2认同)
  • @robertklep 我不想将它存储在会话中。我正在使用 JWT。是否需要 serializeUser/deserializeUser?我想要一个没有会话。我正在使用 JWT (2认同)

Kev*_*vin 41

如果您决定不使用会话,则可以将会话设置为false

app.post('/login', passport.authenticate('local', {
  successRedirect: '/accessed',
  failureRedirect: '/access',
  session: false
}));
Run Code Online (Sandbox Code Playgroud)


ele*_*ake 16

听起来你错过了passportjs设置的一部分,特别是这两种方法:

passport.serializeUser(function(user, done) {
    done(null, user._id);
    // if you use Model.id as your idAttribute maybe you'd want
    // done(null, user.id);
});

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

我添加了关于._idvs. 的一点,.id但这个片段来自文档的配置部分,给另一个读取并祝你好运:)