From 03e234b356c66cf13c4487cf873a9eb4e82884f1 Mon Sep 17 00:00:00 2001 From: Professional Date: Sun, 25 May 2025 23:36:51 +0700 Subject: [PATCH] =?UTF-8?q?=D1=84=D0=B8=D0=BA=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/middleware/adminMiddleware.js | 11 +++++++++++ backend/middleware/authMiddleware.js | 8 ++++++++ src/auth.js | 5 +++++ src/router/index.js | 24 +++++++++++++++++------- 4 files changed, 41 insertions(+), 7 deletions(-) diff --git a/backend/middleware/adminMiddleware.js b/backend/middleware/adminMiddleware.js index 5f18d79..3f7f079 100644 --- a/backend/middleware/adminMiddleware.js +++ b/backend/middleware/adminMiddleware.js @@ -4,16 +4,27 @@ * который добавляет req.user */ const adminMiddleware = (req, res, next) => { + console.log('[DEBUG] adminMiddleware - Проверка прав администратора'); + // Проверяем, есть ли пользователь (должен быть добавлен в middleware авторизации) if (!req.user) { + console.log('[DEBUG] adminMiddleware - req.user не найден, пользователь не авторизован'); return res.status(401).json({ message: 'Не авторизован' }); } + console.log('[DEBUG] adminMiddleware - Пользователь:', { + id: req.user._id, + email: req.user.email, + isAdmin: req.user.isAdmin + }); + // Проверяем, является ли пользователь администратором if (!req.user.isAdmin) { + console.log('[DEBUG] adminMiddleware - Доступ запрещен. У пользователя нет прав администратора'); return res.status(403).json({ message: 'Доступ запрещен. Требуются права администратора' }); } + console.log('[DEBUG] adminMiddleware - Пользователь является администратором, доступ разрешен'); // Если пользователь администратор, продолжаем выполнение запроса next(); }; diff --git a/backend/middleware/authMiddleware.js b/backend/middleware/authMiddleware.js index c2c5fb7..26ffd1b 100644 --- a/backend/middleware/authMiddleware.js +++ b/backend/middleware/authMiddleware.js @@ -47,6 +47,14 @@ const protect = async (req, res, next) => { return next(err); } + // Добавляем отладочное логирование для проверки прав администратора + console.log('[DEBUG] protect middleware - User loaded:', { + id: req.user._id, + name: req.user.name, + email: req.user.email, + isAdmin: req.user.isAdmin + }); + console.log('[DEBUG] protect middleware - User authenticated, calling next()'); next(); } catch (error) { diff --git a/src/auth.js b/src/auth.js index d972383..e326285 100644 --- a/src/auth.js +++ b/src/auth.js @@ -34,10 +34,15 @@ async function fetchUser() { throw new Error('Неверный формат ответа от сервера'); } + // Добавляем дополнительное логирование для отладки + console.log('Получены данные пользователя:', response.data); + console.log('Значение isAdmin в ответе:', response.data.isAdmin); + // Сохраняем данные пользователя user.value = response.data; console.log('Пользователь успешно загружен:', user.value); console.log('isAuthenticated после загрузки пользователя:', isAuthenticated.value); + console.log('Пользователь является администратором:', user.value.isAdmin ? 'Да' : 'Нет'); } catch (error) { console.error('Не удалось загрузить пользователя по токену:', error.response ? error.response.data : error.message); // Если токен невалиден, очищаем его и данные пользователя diff --git a/src/router/index.js b/src/router/index.js index f67f5d0..9762234 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -111,43 +111,53 @@ const router = createRouter({ router.beforeEach(async (to, from, next) => { const { isAuthenticated, token, user, fetchUser } = useAuth(); // Получаем функции и состояния аутентификации + console.log('[ROUTER GUARD] Навигация: от', from.path, 'к', to.path); + console.log('[ROUTER GUARD] Текущий пользователь:', user.value); + console.log('[ROUTER GUARD] isAuthenticated:', isAuthenticated.value); + console.log('[ROUTER GUARD] Есть токен:', !!token.value); + // Проверяем наличие токена в localStorage const hasToken = !!token.value; // Если есть токен в localStorage и нет данных пользователя, пробуем загрузить данные if (hasToken && !user.value) { - console.log('[Router Guard] Найден токен, но нет данных пользователя. Загружаем данные...'); + console.log('[ROUTER GUARD] Найден токен, но нет данных пользователя. Загружаем данные...'); try { await fetchUser(); + console.log('[ROUTER GUARD] Данные пользователя загружены:', user.value); + console.log('[ROUTER GUARD] Пользователь является администратором:', user.value?.isAdmin ? 'Да' : 'Нет'); } catch (error) { - console.error('[Router Guard] Ошибка при загрузке данных пользователя:', error); + console.error('[ROUTER GUARD] Ошибка при загрузке данных пользователя:', error); } } // Проверка прав администратора if (to.meta.requiresAdmin && (!user.value || !user.value.isAdmin)) { - console.log(`[Router Guard] Доступ к ${to.path} запрещен. Требуются права администратора.`); + console.log(`[ROUTER GUARD] Доступ к ${to.path} запрещен. Требуются права администратора.`); + console.log('[ROUTER GUARD] Текущий пользователь:', user.value); + console.log('[ROUTER GUARD] isAdmin:', user.value?.isAdmin); return next({ name: 'Swipe' }); // Перенаправление на обычную страницу пользователей } // Проверяем требования маршрута к авторизации if (to.meta.requiresAuth) { if (isAuthenticated.value) { - console.log(`[Router Guard] Доступ к ${to.path} разрешен. Пользователь аутентифицирован.`); + console.log(`[ROUTER GUARD] Доступ к ${to.path} разрешен. Пользователь аутентифицирован.`); next(); // Пользователь аутентифицирован, можно продолжать навигацию } else { // Если пользователь не аутентифицирован и страница требует авторизации - console.log(`[Router Guard] Доступ к ${to.path} запрещен. Пользователь не аутентифицирован. Перенаправление на /login.`); + console.log(`[ROUTER GUARD] Доступ к ${to.path} запрещен. Пользователь не аутентифицирован. Перенаправление на /login.`); next({ name: 'Login' }); } } else if ((to.name === 'Login' || to.name === 'Register') && isAuthenticated.value) { // Если пользователь уже аутентифицирован и пытается зайти на страницы авторизации if (user.value && user.value.isAdmin) { - console.log(`[Router Guard] Админ аутентифицирован. Перенаправление с ${to.path} на админ-панель.`); + console.log(`[ROUTER GUARD] Админ аутентифицирован. Перенаправление с ${to.path} на админ-панель.`); + console.log('[ROUTER GUARD] isAdmin:', user.value.isAdmin); next({ name: 'AdminDashboard' }); // Перенаправляем на админ-панель для админа } else { - console.log(`[Router Guard] Пользователь аутентифицирован. Перенаправление с ${to.path} на /swipe.`); + console.log(`[ROUTER GUARD] Пользователь аутентифицирован. Перенаправление с ${to.path} на /swipe.`); next({ name: 'Swipe' }); // Перенаправляем на страницу свайпов для обычных пользователей } }