req.logout
не очищает сеанс, но вместо этого очищает информацию для входа в систему из сеанса.Пример из моего хранилища сеансов после входа в систему:
> db.sessions.find().pretty();
{
"_id" : "LkuoFL_cwkvNO3foD_k0zQYADevcdwW6",
"session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"passport\":{\"user\":\"test\"}}",
"expires" : ISODate("2018-06-05T17:31:54.631Z")
}
Здесь вы можете видеть, что passport.user
в session
JSON содержит значение, которое я возвратил из serializeUser
(имя пользователя).После вызова req.logout
хранилище сеанса все еще удерживает сеанс, но сериализованная информация пользователя отсутствует, т.е.Я больше не захожу в систему:
> db.sessions.find().pretty();
{
"_id" : "LkuoFL_cwkvNO3foD_k0zQYADevcdwW6",
"session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"passport\":{}}",
"expires" : ISODate("2018-06-05T17:32:02.391Z")
}
Если я изменю свой обработчик маршрута выхода из системы на этот:
app.post('/logout', (req, res) => {
req.logout();
req.session.destroy((err) => res.redirect('/'));
});
, я вижу, что после выхода из системы сеанс выше исчез, но новыйодин был создан, потому что я попал на первую страницу, и он начинает новый сеанс:
> db.sessions.find().pretty();
{
"_id" : "KIX2rypzvpRdqW7VlzO8B8W-FMXwffGT",
"session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"}}",
"expires" : ISODate("2018-06-05T17:38:01.136Z")
}
Кроме того, cookie connect.sid
в браузере теперь содержит новый ключ сеанса.
Теперь добавьтеclearCookie
.С таким обработчиком выхода:
app.post('/logout', (req, res) => {
req.logout();
req.session.destroy((err) => {
res.clearCookie('connect.sid');
// Don't redirect, just print text
res.send('Logged out');
});
});
хранилище сеансов пусто после нажатия кнопки выхода из системы (обратите внимание, что в этом примере дальнейшие запросы не выполняются):
> db.sessions.find().pretty();
>
изаголовки ответа на запрос на выход из системы показывают очищенный файл cookie:
Set-Cookie: connect.sid=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT
Теперь, если к серверу не выполняются никакие дополнительные запросы (новые могут начать новый сеанс, даже если он не зарегистрирован).в) вы не должны больше видеть connect.sid
cookie в инструментах просмотра.