diff --git a/src/auth.js b/src/auth.js index e43af02..3c8a861 100644 --- a/src/auth.js +++ b/src/auth.js @@ -57,6 +57,61 @@ async function fetchUser() { // Выходим из системы await logout(); return; + } else { + // Если пользователь НЕ заблокирован, проверяем и очищаем любые флаги блокировки + console.log('[Auth] Пользователь не заблокирован, проверяем наличие старых флагов блокировки'); + + // Очищаем флаги блокировки из localStorage, если они есть + const blockFlags = ['accountBlocked', 'deviceBlocked', 'wasAccountBlocked']; + blockFlags.forEach(flag => { + if (localStorage.getItem(flag)) { + console.log(`[Auth] Очищаем флаг блокировки: ${flag}`); + localStorage.removeItem(flag); + } + }); + + // Проверяем URL на наличие параметра blocked и очищаем его при необходимости + const currentUrl = new URL(window.location); + if (currentUrl.searchParams.has('blocked')) { + console.log('[Auth] Обнаружен параметр blocked в URL, пользователь не заблокирован - очищаем'); + currentUrl.searchParams.delete('blocked'); + // Обновляем URL без перезагрузки страницы + window.history.replaceState({}, '', currentUrl.toString()); + } + + // Сбрасываем флаг блокировки аккаунта в socketService + try { + const { resetAccountBlockedFlag } = await import('./services/socketService'); + if (typeof resetAccountBlockedFlag === 'function') { + resetAccountBlockedFlag(); + console.log('[Auth] Сброшен флаг блокировки в socketService'); + } + } catch (error) { + console.log('[Auth] Не удалось сбросить флаг в socketService:', error.message); + } + + // Показываем уведомление о том, что блокировка снята (если ранее была) + if (currentUrl.searchParams.has('unblocked') || + sessionStorage.getItem('wasBlocked') === 'true') { + + const notificationEvent = new CustomEvent('show-toast', { + detail: { + message: 'Блокировка вашего аккаунта была снята. Добро пожаловать!', + type: 'success', + duration: 5000 + } + }); + window.dispatchEvent(notificationEvent); + + // Очищаем флаг из sessionStorage + sessionStorage.removeItem('wasBlocked'); + + // Очищаем параметр unblocked из URL + if (currentUrl.searchParams.has('unblocked')) { + currentUrl.searchParams.delete('unblocked'); + window.history.replaceState({}, '', currentUrl.toString()); + } + } } // Сохраняем данные пользователя @@ -71,6 +126,9 @@ async function fetchUser() { if (error.response && error.response.status === 403) { console.log('[Auth] Пользователь заблокирован согласно ответу сервера'); + // Сохраняем флаг блокировки в sessionStorage для следующей сессии + sessionStorage.setItem('wasBlocked', 'true'); + // Показываем уведомление о блокировке const notificationEvent = new CustomEvent('show-toast', { detail: { diff --git a/src/services/socketService.js b/src/services/socketService.js index 2024a5f..1a492fa 100644 --- a/src/services/socketService.js +++ b/src/services/socketService.js @@ -196,4 +196,10 @@ export const getSocket = () => { // Новая функция для проверки статуса блокировки export const isAccountBlocked = () => { return wasAccountBlocked; +}; + +// Новая функция для сброса флага блокировки аккаунта +export const resetAccountBlockedFlag = () => { + console.log('[SocketService] Сброс флага блокировки аккаунта'); + wasAccountBlocked = false; }; \ No newline at end of file diff --git a/src/views/LoginView.vue b/src/views/LoginView.vue index 5fabfad..c300e9f 100644 --- a/src/views/LoginView.vue +++ b/src/views/LoginView.vue @@ -138,8 +138,28 @@ onMounted(async () => { // Проверяем query параметры для отображения сообщений if (route.query.blocked === 'true') { errorMessage.value = 'Ваш аккаунт заблокирован администратором.'; + blockedInfo.value.blocked = true; } else if (route.query.unblocked === 'true') { - errorMessage.value = 'Ваш аккаунт был разблокирован. Пожалуйста, войдите в систему.'; + // Показываем положительное сообщение о разблокировке + const successEvent = new CustomEvent('show-toast', { + detail: { + message: 'Ваш аккаунт был разблокирован. Добро пожаловать обратно!', + type: 'success', + duration: 5000 + } + }); + window.dispatchEvent(successEvent); + + // Очищаем параметр из URL + const currentUrl = new URL(window.location); + currentUrl.searchParams.delete('unblocked'); + window.history.replaceState({}, '', currentUrl.toString()); + } + + // Проверяем sessionStorage на наличие флага блокировки + if (sessionStorage.getItem('wasBlocked') === 'true') { + blockedInfo.value.blocked = true; + blockedInfo.value.message = 'Ваш аккаунт был заблокирован администратором.'; } });