refactor: шаг 5 — /login /logout вынесены в src/routes/auth.js
This commit is contained in:
@@ -54,39 +54,14 @@ async function start() {
|
||||
aggregateCIDRs,
|
||||
}));
|
||||
|
||||
// Страница входа — отдаём форму выбора мок-пользователя.
|
||||
// Генерируем CSRF-токен и передаём в шаблон для скрытого поля формы.
|
||||
app.get('/login', (req, res) => {
|
||||
const csrfToken = generateCsrfToken(req, res);
|
||||
res.render('login', { users: MOCK_USERS, error: req.query.error || null, csrfToken });
|
||||
});
|
||||
|
||||
// Обработка логина: создаём JWT и кладём в httpOnly cookie.
|
||||
// doubleCsrfProtection проверяет, что форма отправлена с нашей страницы /login.
|
||||
app.post('/login', doubleCsrfProtection, async (req, res) => {
|
||||
const user = MOCK_USERS.find(u => u.id === req.body.user);
|
||||
if (!user) return res.redirect('/login?error=' + encodeURIComponent('Пользователь не найден'));
|
||||
try {
|
||||
const token = await auth.issue({
|
||||
clientId: user.clientId,
|
||||
companyId: user.companyId,
|
||||
companyName: user.companyName,
|
||||
email: user.email,
|
||||
});
|
||||
res.cookie('jwt', token, {
|
||||
httpOnly: true,
|
||||
secure: process.env.NODE_ENV === 'production',
|
||||
sameSite: 'lax',
|
||||
maxAge: 24 * 60 * 60 * 1000, // 24 часа
|
||||
});
|
||||
res.redirect(req.query.returnTo || '/');
|
||||
} catch (e) {
|
||||
res.redirect('/login?error=' + encodeURIComponent('Ошибка выпуска токена'));
|
||||
}
|
||||
});
|
||||
|
||||
// Выход: очищаем cookie и возвращаем на /login
|
||||
app.get('/logout', (req, res) => { res.clearCookie('jwt'); res.redirect('/login'); });
|
||||
// GET /login, POST /login, GET /logout.
|
||||
// src/routes/auth.js содержит логику и комментарии.
|
||||
app.use(require('./src/routes/auth').createRouter({
|
||||
auth,
|
||||
doubleCsrfProtection,
|
||||
generateCsrfToken,
|
||||
MOCK_USERS,
|
||||
}));
|
||||
|
||||
// ── Все маршруты ниже требуют валидного JWT (проверяет auth.middleware) ───────
|
||||
app.use(auth.middleware);
|
||||
|
||||
Reference in New Issue
Block a user