用户登录时如何修复 "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'})
}
我正在学习 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'})
}