This commit is contained in:
Professional 2025-05-26 20:24:08 +07:00
parent 22272dd938
commit 60c524caf6
3 changed files with 85 additions and 1 deletions

View File

@ -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: {

View File

@ -197,3 +197,9 @@ export const getSocket = () => {
export const isAccountBlocked = () => {
return wasAccountBlocked;
};
// Новая функция для сброса флага блокировки аккаунта
export const resetAccountBlockedFlag = () => {
console.log('[SocketService] Сброс флага блокировки аккаунта');
wasAccountBlocked = false;
};

View File

@ -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 = 'Ваш аккаунт был заблокирован администратором.';
}
});