用户登录时如何修复 "Failed to serialize user into session"? (node.js 护照)

How do I fix "Failed to serialize user into session" when a user logs in? (node.js passport)

我正在学习 node.js 护照教程(github:https://github.com/WebDevSimplified/Nodejs-Passport-Login)。注册用户工作正常,但由于某种原因,当我在登录页面上输入这些凭据时,会发生这种情况:

Error: Failed to serialize user into session

我看到的所有针对此问题的解决方案都使用我已有的代码:

passport.use(new LocalStrategy({usernameField: 'email'}, 
    authenticateUser))
    passport.serializeUser((user, done) =>
        done(null, user.id))
    passport.deserializeUser((id, done) => 
        { return done(null, getUserById(id)) })

并且在 server.js 文件中:

const initialisePassport = require('./passport-config')
const { required } = require('nodemon/lib/config')
initialisePassport(
    passport, 
    email => users.find(user => user.email === email),
    id => users.find(user => user.id === id)
)

这里有什么我遗漏或做错的吗?

作为参考,我发现了问题。我 return 编辑了一个布尔值 true 和一条消息:

if(user == null){
            return done(null, false, {message: 'No user found with that email'})

        }

        try{
            if(await bcrypt.compare(password, user.password)){
                return done(null, true, {message:'Password correct'})
            } else{
                return done(null, false, {message: 'Password incorrect'})
            }

这不是必需的,它使用的是布尔值而不是 JSON 对象,因此我将其替换为在 return 语句中传递用户:

if(user == null){
            return done(null, false, {message: 'No user found with that email'})

        }

        try{
            if(await bcrypt.compare(password, user.password)){
                return done(null, user)
            } else{
                return done(null, false, {message: 'Password incorrect'})
            }