我正在使用带有 Express 框架的 Node.js 开发应用程序,使用 Passport 进行用户身份验证,使用 MongoDB 进行存储。我无法弄清楚为什么无论哪个用户尝试登录,服务器都认为登录用户是数据库中的第一个用户,即第一个注册的用户。
当服务器接收到 /login 的 post 请求时,它会运行 passport.authenticate 来验证用户的凭据。从注销到控制台,很明显传递了正确的用户凭据,甚至会话 ID 也是正确的,但是无论在哪里设置 req.user,它都被设置为错误的用户。
这是控制台中发生的事情的日志,可以为您提供一些想法:
get /user
--req.user is { salt: '$2a$10$NgPcBpvUqGq32IoWvsChd.',
hash: '$2a$10$NgPcBpvUqGq32IoWvsChd.SYva2e/aaPsfUcdN65aRm/D1oYJB3Ty',
username: 'daniel',
email: 'dan@dan.com',
_id: 515decd49fc3204ca1000001,
__v: 0,
songs: [] }
--req.session is { cookie:
{ path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true },
passport: { user: '515decdc9fc3204ca1000002' },
flash: {} }
如您所见,用户 id 在 req.sessions 中是正确的,但在 req.user 中是不正确的。
完整代码可在此处获得: https ://github.com/patrickmestabrook/song-swap