У меня проблема с функцией выхода из приложения.
Проблема
Вызов req.session.destroy не удаляет данные сеанса из сеансов MongoDBколлекция в только для производства .
Запрос попадает на сервер, выполняется метод выхода из системы, ошибка не возвращается, функция уничтожения, запуск console.log в сеансе показывает, что он пуст, но на страницеобновить пользователь все еще вошел в систему, и проверка db.sessions.find () покажет данные сеанса нетронутыми.
Я предполагаю, что настройка субдомена как-то связана с этим, так как локальный работает должным образом.Я просто не могу понять, что это такое, так как в противном случае приложение работает нормально.
Используемые пакеты ключей
- express-session
- connect-mongo
- cors
Функциональность отлично работает локально (API и приложение React работают на локальном хосте, только на разных портах).
Производство настроено такчто
- api.mydomain.com - это сервер Node с Express API и Mongo db.
- app.mydomain.com - это приложение React, которое отправляет запросы к API.
server.js - важная часть
//use sessions for tracking logins
var sessionData = {
name: 'secure_name', // for testing
secret: 'secure_secret', // for testing
resave: true,
rolling: true,
saveUninitialized: false,
store: new MongoStore({ mongooseConnection: mongoose.connection }),
cookie: {
"maxAge": (1000 * 60 * 60 * 7), // 7 days.
secure: false,
path: '/',
domain: process.env.DOMAIN
}
};
// Setup session with config and make the app use it.
var sessionMiddleware = session(sessionData);
app.use(sessionMiddleware);
...
// User - Logout.
app.get('/api/users/logout', user.logout);
метод user.logout
// Logout user.
exports.logout = (req, res, next) => {
// Only if there is an active session.
if (req.session) {
// delete session object
req.session.destroy(error => {
req.session = null;
if (error) return next(error);
res.send({ logout: true })
});
}
}
Реагировать на запрос метода выхода из системы
// Logout - end this user session.
@action logout() {
// Destroy session.
return axios.get(config.url + 'api/users/logout', {
headers: {
'Access-Control-Allow-Origin': '*',
'Content-Type': 'application/json',
},
})
Любая помощь будет принята с благодарностью.