试图用相同的用户名登录一个人

问题描述

所以我正在制作一个包含个人资料和内容的应用程序。并且用户将通过使用路由 /user/:id(:id 将是 req.user.id)连接到他的个人资料,事情是当我尝试使用相同的用户名登录用户时,req.user 是相同的即使他们有不同的电子邮件/凭证。我认为这是因为我正在使用护照,并且在序列化用户时,将他的凭据保存到会话就是保存用户名,当然,在反序列化时,它将通过用户名找到用户。我已经尝试将会话密钥更改为电子邮件或 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.serializeUserUser.deserializeUser 正在影响的事情。我不清楚为什么他们会通过护照方法。

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

passport.serializeUser((user,done) => {
    done(null,user.email);
});

passport.deserializeUser((email,done) => {
  // Mongoose query
  // Find matching user based on email
  const user = await User.findOne({ email }).exec();
  done(null,user);
});

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...