Как сгенерировать уникальную сессионную готовку ie для каждого входа пользователя с использованием паспорта. js in express? - PullRequest
2 голосов
/ 26 марта 2020

Все, я новый пользователь и ученик для express и паспорта, извините за любые ошибки в этом посте. В настоящее время приведенный ниже код генерирует один и тот же повар сеанса ie для всех пользователей.

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, который пытается ввести localhost: 3000 / users / 123@gmail.com, который автоматически входит в систему и перенаправляется на 123@gmail.com/profile, поскольку для пользователя уже создан сеанс XYZ, который успешно вошел в систему, используя страницу входа в систему. Поэтому я сталкиваюсь с проблемой, что если один пользователь аутентифицирован, этот сеанс сохраняется и для всех других зарегистрированных пользователей. Что я хочу добиться, если после входа в систему он должен иметь уникальный идентификатор сеанса и другие зарегистрированные пользователи, если они пытаются ввести localhost: 3000 / users / 123@gmail.com должно быть перенаправлено на страницу входа, а не для автоматического входа.

...