diff --git a/src/router/index.js b/src/router/index.js index b2b8248..a1141ad 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -66,22 +66,40 @@ const router = createRouter({ }); // Добавляем навигационный guard для проверки аутентификации -router.beforeEach((to, from, next) => { - const { isAuthenticated } = useAuth(); // Получаем текущий статус аутентификации +router.beforeEach(async (to, from, next) => { + const { isAuthenticated, token, user, fetchUser } = useAuth(); // Получаем функции и состояния аутентификации + + // Проверяем наличие токена в localStorage + const hasToken = !!token.value; + + // Если есть токен в localStorage и нет данных пользователя, пробуем загрузить данные + if (hasToken && !user.value) { + console.log('[Router Guard] Найден токен, но нет данных пользователя. Загружаем данные...'); + try { + await fetchUser(); + } catch (error) { + console.error('[Router Guard] Ошибка при загрузке данных пользователя:', error); + } + } - // Проверяем, требует ли маршрут аутентификации и не аутентифицирован ли пользователь - if (to.meta.requiresAuth && !isAuthenticated.value) { - // Если да, перенаправляем на страницу входа - console.log(`[Router Guard] Доступ к ${to.path} запрещен. Пользователь не аутентифицирован. Перенаправление на /login.`); - next({ name: 'Login' }); // Или next('/login'); - } else if ((to.name === 'Login' || to.name === 'Register') && isAuthenticated.value) { - // (Опционально) Если пользователь уже аутентифицирован и пытается зайти на /login или /register, - // перенаправляем его на главную или на /swipe - console.log(`[Router Guard] Пользователь аутентифицирован. Перенаправление с ${to.path} на /.`); - next({ name: 'Home' }); // или next('/'); + // Проверяем требования маршрута к авторизации + if (to.meta.requiresAuth) { + if (isAuthenticated.value) { + console.log(`[Router Guard] Доступ к ${to.path} разрешен. Пользователь аутентифицирован.`); + next(); // Пользователь аутентифицирован, можно продолжать навигацию + } else { + // Если пользователь не аутентифицирован и страница требует авторизации + console.log(`[Router Guard] Доступ к ${to.path} запрещен. Пользователь не аутентифицирован. Перенаправление на /login.`); + next({ name: 'Login' }); + } + } + else if ((to.name === 'Login' || to.name === 'Register') && isAuthenticated.value) { + // Если пользователь уже аутентифицирован и пытается зайти на страницы авторизации + console.log(`[Router Guard] Пользователь аутентифицирован. Перенаправление с ${to.path} на /swipe.`); + next({ name: 'Swipe' }); // Перенаправляем на страницу свайпов вместо главной для лучшего UX } else { - // В противном случае разрешаем навигацию + // Другие страницы, не требующие авторизации next(); } });