Я инициализирую express-session
:
const session = require('express-session')
const MongoStore = require('connect-mongo')(session);
//use sessions for tracking logins
app.use(session({
secret: 'secret',
resave: true,
saveUninitialized: false,
store: new MongoStore({
mongooseConnection: mongoose.connection
})
}));
Мое промежуточное ПО для проверки подлинности:
function requiresLogin(req, res, next) {
if (req.session && req.session.userId) {
console.log('Session OK ' + JSON.stringify(req.session) );
return next();
} else {
var err = new Error('You must be logged in to view this page.');
err.status = 401;
return next(err);
}
}
Моя logout
конечная точка:
// GET /logout
exports.logout = function(req, res, next) {
if (req.session) {
// delete session object
req.session.destroy(function(err) {
if(err) {
return next(err);
} else {
req.session = null;
console.log("logout successful");
return res.redirect('/');
}
});
}
};
Мои тесты:
Я отправляю запрос на конечную точку test
, которая находится за промежуточным программным обеспечением requiresLogin
, и получаю (как и ожидалось):
Error: You must be logged in to view this page.
Я отправляю запрос на конечную точку login
и получаю файл cookie:
set-cookie: connect.sid=s%3A0doMoVwGPkcVUgar3uP5WR36b7k9_v27.O2B8vl35TQLiet3WltP2UAH3iuaeif3%2BPDActkTBYUw; Path=/; HttpOnly
Я снова использую этот файл cookie на моей test
конечной точке:
Session OK {"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"},"userId":"5ae6ddee1239c157ec36c06c"}
Я выполняю /logout
, за что получаю
logout successful
После этого я снова пробую свою test
конечную точку с файлом cookie, который, как мне кажется, я только что уничтожил:
Session OK {"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"},"userId":"5ae6ddee1239c157ec36c06c"}
Сессия не затрагивается в базе данных после успешного destroy
.
Почему я могу использовать свой файл cookie аутентификации сеанса после того, как я уничтожил сеанс?
EDIT
Вопрос должен быть удален. Я использовал неправильный Cookie, когда выполнял /logout
. Глупая ошибка, мой плохой ...