代码之家  ›  专栏  ›  技术社区  ›  Jatin Mehrotra

如何使用护照.js快车?

  •  1
  • Jatin Mehrotra  · 技术社区  · 6 年前

    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");
          }
    

    在这个代码中应用程序.post(“/register”),我可以成功注册用户说xyz@gmail.com邮箱同一个用户(xyz@gmail.com邮箱(也可以成功登录,登录时xyz@gmail.com邮箱他们浏览器中的URL更改为本地主机:3000/users/xyz@gmail.com可以查看它们的配置文件,其中包含订单历史和代码中提到的映射,但是另一个注册用户说123@gmail.com试图进入本地主机:3000/users/123@gmail.com自动登录并重定向到123@gmail.com/profile因为已经为使用登录页成功登录的用户XYZ创建了会话。所以我面临一个问题,如果一个用户通过了身份验证,那么所有其他注册用户的会话也将持续。 我想实现的是,一旦用户登录,就应该有一个唯一的会话id,如果其他注册用户试图输入本地主机:3000/users/123@gmail.com应重定向到登录页,而不是自动登录。

    0 回复  |  直到 6 年前
    推荐文章