如何为Express中使用password.js登录的每个用户生成唯一的会话cookie?

时间:2020-03-26 06:13:50

标签: node.js express passport.js session-cookies

每个人,我都是快递和护照的新用户和学习者,对本文中的任何错误表示抱歉。 当前,以下代码正在为所有用户生成相同的会话cookie。

passport.use(User.createStrategy());
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());




app.get("/", function(req,res) {
  res.render("index");
});

app.get("/login", function(req,res) {
  res.render("login");
});

app.get("/register", function(req,res) {
  res.render("register");
});

app.get("/logout", function(req, res) {
  req.logout();
  res.redirect("/");
});

app.post("/register", function(req, res) {


//We will be using Passport-local-mongoose for all registration and authentication as a middleman for us
User.register({username: req.body.username}, req.body.password, function(err, user) {
  if (err) {
    console.log(err);
    res.redirect("/register")
  } else {
    //If registered successfully, perform LOCAL Authentication - Nothing to UNDERSTAND here
    passport.authenticate("local")(req, res, function(){
        res.send("Done");
    });
  }
});

});

app.post("/login", function(req,res) {

const user = new User({
  username: req.body.username,
  password: req.body.password
});

//Login method from Passport
req.login(user, function(err) {
  if (err) {
    console.log(err);
    res.redirect("/login");
  } else {
    passport.authenticate("local")(req, res, function(){
        res.redirect("/users/" + user.username);
      });
  }
});
});

app.get("/users/:username", function(req,res) {

      if(req.isAuthenticated()) {
        User.findOne({username: req.params.username}, function(err,results) {
          if(!err){
            res.render("users/profile", {name: results.username});
          }
        });
      } else {
        res.redirect("/login");
      }

在app.post(“ / register”)处的此代码中,我能够成功注册用户xyz@gmail.com,而同一用户(xyz@gmail.com(也可以成功登录,并且在登录xyz后@ gmail.com在浏览器中的URL更改为localhost:3000/users/xyz@gmail.com,可以查看其个人资料,其中包含订单历史记录和代码中提到的地图,但是还有另一个注册用户说123 @ gmail .com试图输入本地主机:3000/users/123@gmail.com,该主机会自动登录并重定向到123@gmail.com/profile,因为已经为使用登录名成功登录的用户XYZ建立了会话因此,我面临一个问题,如果一个用户通过了身份验证,则该会话对于所有其他注册用户也将持续存在。 我要实现的目标是,一旦用户登录,它应该具有唯一的会话ID;如果其他注册用户尝试输入localhost:3000/users/123@gmail.com,则应该重定向到登录页面,而不是自动登录。

0 个答案:

没有答案