This commit is contained in:
Professional 2025-05-25 02:00:18 +07:00
parent 62763c567d
commit 66e20ddf22

View File

@ -66,22 +66,40 @@ const router = createRouter({
}); });
// Добавляем навигационный guard для проверки аутентификации // Добавляем навигационный guard для проверки аутентификации
router.beforeEach((to, from, next) => { router.beforeEach(async (to, from, next) => {
const { isAuthenticated } = useAuth(); // Получаем текущий статус аутентификации 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) { if (to.meta.requiresAuth) {
// Если да, перенаправляем на страницу входа if (isAuthenticated.value) {
console.log(`[Router Guard] Доступ к ${to.path} запрещен. Пользователь не аутентифицирован. Перенаправление на /login.`); console.log(`[Router Guard] Доступ к ${to.path} разрешен. Пользователь аутентифицирован.`);
next({ name: 'Login' }); // Или next('/login'); next(); // Пользователь аутентифицирован, можно продолжать навигацию
} else if ((to.name === 'Login' || to.name === 'Register') && isAuthenticated.value) { } else {
// (Опционально) Если пользователь уже аутентифицирован и пытается зайти на /login или /register, // Если пользователь не аутентифицирован и страница требует авторизации
// перенаправляем его на главную или на /swipe console.log(`[Router Guard] Доступ к ${to.path} запрещен. Пользователь не аутентифицирован. Перенаправление на /login.`);
console.log(`[Router Guard] Пользователь аутентифицирован. Перенаправление с ${to.path} на /.`); next({ name: 'Login' });
next({ name: 'Home' }); // или next('/'); }
}
else if ((to.name === 'Login' || to.name === 'Register') && isAuthenticated.value) {
// Если пользователь уже аутентифицирован и пытается зайти на страницы авторизации
console.log(`[Router Guard] Пользователь аутентифицирован. Перенаправление с ${to.path} на /swipe.`);
next({ name: 'Swipe' }); // Перенаправляем на страницу свайпов вместо главной для лучшего UX
} }
else { else {
// В противном случае разрешаем навигацию // Другие страницы, не требующие авторизации
next(); next();
} }
}); });