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 для проверки аутентификации
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();
}
});