Authentication 尝试使用相同用户名登录用户

Authentication 尝试使用相同用户名登录用户,authentication,session,passport-local,passport-google-oauth,Authentication,Session,Passport Local,Passport Google Oauth,所以我正在制作一个包含个人资料和其他东西的应用程序。用户将通过使用route/user/:id(the:id将是req.user.id)连接到他的个人资料。问题是,当我尝试使用相同用户名登录用户时,req.user对于这两种情况都是相同的,尽管他们有不同的电子邮件/凭据。我认为这是因为我在使用passport,当序列化一个用户时,将他的凭证保存到会话就是保存用户名,当然,当需要序列化时,它将通过他的用户名找到该用户。我已经尝试将会话密钥更改为电子邮件或id,因此它不会找到具有相同用户名的用户,但

所以我正在制作一个包含个人资料和其他东西的应用程序。用户将通过使用route/user/:id(the:id将是req.user.id)连接到他的个人资料。问题是,当我尝试使用相同用户名登录用户时,req.user对于这两种情况都是相同的,尽管他们有不同的电子邮件/凭据。我认为这是因为我在使用passport,当序列化一个用户时,将他的凭证保存到会话就是保存用户名,当然,当需要序列化时,它将通过他的用户名找到该用户。我已经尝试将会话密钥更改为电子邮件或id,因此它不会找到具有相同用户名的用户,但我无法使其正常工作。 这是密码

passport.serializeUser(User.serializeUser(function (user, done) {
    done(null, user.email)
}));
passport.deserializeUser(User.deserializeUser(function (email, done) {
    user.findById(id, function (err, user) {
        done(err, user)
    })

}))

OUTPUT

Session {
  cookie: {
    path: '/',
    _expires: 2021-05-11T18:40:11.634Z,
    originalMaxAge: 604800000,
    httpOnly: true
  },
  flash: {},
  passport: { user: User's name }
}


正如您所看到的,尽管我试图将电子邮件密钥添加到会话中,但它似乎不起作用。
有人能帮我解决这个问题,或者甚至提出一个新的解决方案吗?我建议调查一下
User。serializeUser
User。反序列化User
会影响到一些事情。我不清楚他们为什么要通过护照的方法

下面是一个通用实现的想法,它可以简化获取数据并将数据传递给
req
对象的方式

passport.user((用户,完成)=>{
完成(空,user.email);
});
passport.deserializeUser((电子邮件,完成)=>{
//猫鼬查询
//基于电子邮件查找匹配的用户
const user=await user.findOne({email}).exec();
完成(空,用户);
});

谢谢您的帮助!我会试试的不客气!如果你觉得我的回答有帮助,你能把它标记为接受吗?