我正在尝试在我的应用程序上使用req.logout()函数。但是,我似乎遇到了一个问题,导致该功能无法正常工作。这是什么很奇怪:
我已经仔细检查了我的href都指向正确的路由,所以是正确的。 如果我将路由更改为“ / out”之类并刷新服务器,则在我第一次按下注销按钮时,它将起作用。但是,如果我重新登录并重试,将无法使用。
换句话说,仅当我更改路由结构时,我的注销路由才有效,并且仅在我首次登录新的路由结构时才有效。这是我设置代码的方式:
//设置
app.use(require("express-session")({
secret: "Something",
resave: false,
saveUninitialized: false
}));
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
app.use(function(req, res, next) {
res.locals.currentUser = req.user;
res.locals.error = req.flash("error");
res.locals.success = req.flash("success");
next();
});
//所有路线
app.get("/signup", function(req, res) {
res.render("signup.ejs");
});
app.post("/signup", function(req, res) {
User.register(new User({username: req.body.username}), req.body.password, function(err, newUser) {
if (err) {
console.log(err);
} else {
passport.authenticate("local")(req, res, function() {
req.flash("success", "You're now registered in as " + newUser.username + "!");
res.redirect(301, "/");
});
}
})
});
app.get("/login", function(req, res) {
res.render("login.ejs");
});
app.post("/login", passport.authenticate("local", {
successRedirect: "/",
failureRedirect: "/login"
}), function(req, res) {
});
app.get("/logout", function(req, res) {
req.logout();
req.flash("success", "You have logged out!");
res.redirect(301, "/");
});
// HTML(使用EJS)
<div class="nav__user">
<% if (!currentUser) { %>
<a href="/login" class="loginButton">Login</a>
<a href="/signup" class="signupButton">Sign Up</a>
<% } else { %>
<p><%= currentUser.username %></p>
<a href="/logout">Log Out</a>
<% } %>
</div>
非常感谢您的帮助。不知道是什么原因造成的。