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应重定向到登录页,而不是自动登录。