Я создал пример приложения с микросервисной архитектурой в docker-compose, MySql - это база данных. Я могу настроить и запустить приложение с ожидаемой маршрутизацией через шлюз Express.
Я пытаюсь реализовать управление сеансами с помощью экспресс-сессии. Я устанавливаю флаг сеанса isLoggedIn устанавливается в true, когда происходит успешное вход в систему, но когда я пытаюсь получить доступ к сеансу при выходе из системы, сеанс говорит, что session.isLoggedIn не определен. Не уверен, как сохранить сеанс в этой архитектуре. Вот что я сделал до сих пор.
В app.js
var app = express();
var sessionMiddleware = session({
secret: 'keyboard cat',
resave: true,
saveUninitialized: true
});
app.use(sessionMiddleware);
app.use(function (req, res, next) {
req.session.test = "test";
next();
});
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.get('/', (req, res) => {
res.json({ message: 'It works!!!' });
});
app.use('/api/users', sessionMiddleware, userRouter);
module.exports = app;
In user.router
const express = require('express');
const catchErrors = require('express-catch-errors');
const router = express.Router();
const {login, logout } = require('./user.controller');
router
.route('/login')
.post(catchErrors(login))
router
.route('/logout')
.get(catchErrors(logout));
module.exports = router;
В user.controller внутри логина
req.session.isLoggedIn = true;
console.log("in login", req.session);
console.log("session after", req.sessionID);
внутри выхода
console.log("in destroy", req.sessionID);
console.log("session destroy", req.session);
req.session.destroy((err) => {
if (err) {
return console.log(err);
}
res.send({
code: 200,
success: 'User logged out successfully'
});
});
Каждый раз, когда я вхожу в экспресс, создается новый объект сеанса и массив сессий создается внутри req с другим идентификатором сеанса.
Как обрабатывать сессию в таких ситуациях. Также, как обрабатывать сессии для нескольких пользователей. ?
Любая идея высоко ценится.