Я только что настроил пользовательскую функциональность на своем сайте сегодня, но, похоже, в Chrome есть проблема с cookie, из-за которой я не могу выйти из системы при входе в систему как пользователь.
Когда я нажимаю кнопку выхода из системы, меня возвращают на домашнюю страницу, но я все еще вошел в систему. Я поместил некоторые console.logs в маршрут / logout, и кажется, что они не запускаются, когда я получить доступ к маршруту.
Если я обновлю файлы cookie моего браузера, я смогу выйти из системы один раз. Если я снова войду в систему, я больше не смогу выйти. Очень странно. Если я захожу в любой другой браузер (или на свой телефон), я могу постоянно выходить из системы без проблем. Это также работает, если я нахожусь на вкладке инкогнито в Chrome.
Я пробовал все, что угодно, с точки зрения кода, который может удалить куки (req.session.destroy () и т. Д.) Безрезультатно.
Вот мой код:
// Настройка
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>
И, если это поможет, вот что я вижу на вкладке сети Chrome:
Response Headers:
HTTP/1.1 301 Moved Permanently
x-powered-by: Express
location: /
vary: Accept
content-type: text/html; charset=utf-8
content-length: 58
date: Sat, 05 Jan 2019 22:27:19 GMT
X-BACKEND: apps-proxy
Request Headers:
Provisional headers are shown
Referer: https://webdevbootcamp-osaisus.c9users.io/
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/71.0.3578.98 Safari/537.36
Любая помощь очень ценится. Не знаю, что может быть причиной этого.