фикс
This commit is contained in:
parent
0f548c6e38
commit
8b42a81414
@ -92,7 +92,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, onMounted, onUnmounted, computed } from 'vue';
|
import { ref, onMounted, computed } from 'vue';
|
||||||
import { useAuth } from '@/auth';
|
import { useAuth } from '@/auth';
|
||||||
import { useRoute } from 'vue-router';
|
import { useRoute } from 'vue-router';
|
||||||
|
|
||||||
@ -132,74 +132,6 @@ const enableScroll = () => {
|
|||||||
document.body.style.width = '';
|
document.body.style.width = '';
|
||||||
};
|
};
|
||||||
|
|
||||||
// Функция для проверки и восстановления сессии после разблокировки
|
|
||||||
const tryRestoreUnblockedSession = async () => {
|
|
||||||
console.log('[LoginView] Проверка возможности восстановления сессии после разблокировки');
|
|
||||||
|
|
||||||
// Проверяем наличие разблокировки в параметрах URL
|
|
||||||
const isUnblocked = route.query.unblocked === 'true';
|
|
||||||
|
|
||||||
// Проверяем наличие информации о разблокировке
|
|
||||||
const unblockedInfoStr = localStorage.getItem('accountUnblockedInfo');
|
|
||||||
const sessionBackupStr = localStorage.getItem('blockedSessionBackup');
|
|
||||||
|
|
||||||
if ((isUnblocked || unblockedInfoStr) && sessionBackupStr) {
|
|
||||||
try {
|
|
||||||
console.log('[LoginView] Найдены данные для восстановления сессии');
|
|
||||||
const sessionBackup = JSON.parse(sessionBackupStr);
|
|
||||||
|
|
||||||
// Проверяем актуальность данных (не старше 30 дней)
|
|
||||||
const backupTime = new Date(sessionBackup.timestamp);
|
|
||||||
const now = new Date();
|
|
||||||
const thirtyDaysInMs = 30 * 24 * 60 * 60 * 1000;
|
|
||||||
|
|
||||||
if (now - backupTime < thirtyDaysInMs && sessionBackup.token) {
|
|
||||||
console.log('[LoginView] Данные сессии актуальны, восстанавливаем сессию');
|
|
||||||
loading.value = true;
|
|
||||||
|
|
||||||
// Устанавливаем токен в localStorage
|
|
||||||
localStorage.setItem('userToken', sessionBackup.token);
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Выполняем автоматическую аутентификацию
|
|
||||||
await fetchUser();
|
|
||||||
|
|
||||||
// Удаляем данные о блокировке и резервную копию
|
|
||||||
localStorage.removeItem('accountBlockedInfo');
|
|
||||||
localStorage.removeItem('blockedSessionBackup');
|
|
||||||
localStorage.removeItem('accountUnblockedInfo');
|
|
||||||
|
|
||||||
// Показываем уведомление
|
|
||||||
const event = new CustomEvent('show-toast', {
|
|
||||||
detail: {
|
|
||||||
message: 'Ваш аккаунт разблокирован. Сессия восстановлена автоматически.',
|
|
||||||
type: 'success',
|
|
||||||
duration: 5000
|
|
||||||
}
|
|
||||||
});
|
|
||||||
window.dispatchEvent(event);
|
|
||||||
|
|
||||||
console.log('[LoginView] Сессия успешно восстановлена после разблокировки');
|
|
||||||
return true;
|
|
||||||
} catch (error) {
|
|
||||||
console.error('[LoginView] Ошибка при восстановлении сессии:', error);
|
|
||||||
localStorage.removeItem('userToken');
|
|
||||||
loading.value = false;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
console.log('[LoginView] Данные сессии устарели, удаляем');
|
|
||||||
localStorage.removeItem('blockedSessionBackup');
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error('[LoginView] Ошибка при обработке данных сессии:', error);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
console.log('[LoginView] Данные для восстановления сессии не найдены');
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
preventScroll(); // Блокируем прокрутку при монтировании компонента
|
preventScroll(); // Блокируем прокрутку при монтировании компонента
|
||||||
|
|
||||||
@ -217,43 +149,21 @@ onMounted(async () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Проверяем наличие информации о разблокировке в URL или localStorage
|
// Проверяем наличие информации о разблокировке только для отображения уведомления
|
||||||
const unblockedInfoStr = localStorage.getItem('accountUnblockedInfo');
|
const unblockedInfoStr = localStorage.getItem('accountUnblockedInfo');
|
||||||
const isUnblocked = route.query.unblocked === 'true';
|
if (unblockedInfoStr) {
|
||||||
|
try {
|
||||||
if (isUnblocked || unblockedInfoStr) {
|
const unblockedInfo = JSON.parse(unblockedInfoStr);
|
||||||
console.log('[LoginView] Обнаружен признак разблокировки аккаунта, пытаемся восстановить сессию');
|
// Отображаем уведомление о разблокировке
|
||||||
|
errorMessage.value = unblockedInfo.message || 'Ваш аккаунт был разблокирован. Пожалуйста, войдите в систему.';
|
||||||
// Попытка восстановить сессию в случае разблокировки
|
// Удаляем информацию о разблокировке, чтобы сообщение не появлялось повторно
|
||||||
const restored = await tryRestoreUnblockedSession();
|
|
||||||
|
|
||||||
if (restored) {
|
|
||||||
console.log('[LoginView] Сессия успешно восстановлена, очищаем данные о разблокировке');
|
|
||||||
localStorage.removeItem('accountUnblockedInfo');
|
localStorage.removeItem('accountUnblockedInfo');
|
||||||
} else {
|
} catch (e) {
|
||||||
console.log('[LoginView] Не удалось восстановить сессию, показываем уведомление о разблокировке');
|
console.error('[LoginView] Ошибка при парсинге информации о разблокировке:', e);
|
||||||
|
|
||||||
// Если восстановление не удалось, но есть информация о разблокировке,
|
|
||||||
// отображаем уведомление для пользователя
|
|
||||||
if (unblockedInfoStr) {
|
|
||||||
try {
|
|
||||||
const unblockedInfo = JSON.parse(unblockedInfoStr);
|
|
||||||
// Отображаем уведомление о разблокировке
|
|
||||||
errorMessage.value = unblockedInfo.message || 'Ваш аккаунт был разблокирован. Пожалуйста, войдите в систему.';
|
|
||||||
// Удаляем информацию о разблокировке, чтобы сообщение не появлялось повторно
|
|
||||||
localStorage.removeItem('accountUnblockedInfo');
|
|
||||||
} catch (e) {
|
|
||||||
console.error('[LoginView] Ошибка при парсинге информации о разблокировке:', e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
onUnmounted(() => {
|
|
||||||
enableScroll(); // Восстанавливаем прокрутку при размонтировании компонента
|
|
||||||
});
|
|
||||||
|
|
||||||
const handleLogin = async () => {
|
const handleLogin = async () => {
|
||||||
errorMessage.value = '';
|
errorMessage.value = '';
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user