This commit is contained in:
Professional 2025-05-26 19:45:11 +07:00
parent 0f548c6e38
commit 8b42a81414

View File

@ -92,7 +92,7 @@
</template>
<script setup>
import { ref, onMounted, onUnmounted, computed } from 'vue';
import { ref, onMounted, computed } from 'vue';
import { useAuth } from '@/auth';
import { useRoute } from 'vue-router';
@ -132,74 +132,6 @@ const enableScroll = () => {
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 () => {
preventScroll(); // Блокируем прокрутку при монтировании компонента
@ -217,24 +149,8 @@ onMounted(async () => {
}
}
// Проверяем наличие информации о разблокировке в URL или localStorage
// Проверяем наличие информации о разблокировке только для отображения уведомления
const unblockedInfoStr = localStorage.getItem('accountUnblockedInfo');
const isUnblocked = route.query.unblocked === 'true';
if (isUnblocked || unblockedInfoStr) {
console.log('[LoginView] Обнаружен признак разблокировки аккаунта, пытаемся восстановить сессию');
// Попытка восстановить сессию в случае разблокировки
const restored = await tryRestoreUnblockedSession();
if (restored) {
console.log('[LoginView] Сессия успешно восстановлена, очищаем данные о разблокировке');
localStorage.removeItem('accountUnblockedInfo');
} else {
console.log('[LoginView] Не удалось восстановить сессию, показываем уведомление о разблокировке');
// Если восстановление не удалось, но есть информация о разблокировке,
// отображаем уведомление для пользователя
if (unblockedInfoStr) {
try {
const unblockedInfo = JSON.parse(unblockedInfoStr);
@ -246,12 +162,6 @@ onMounted(async () => {
console.error('[LoginView] Ошибка при парсинге информации о разблокировке:', e);
}
}
}
}
});
onUnmounted(() => {
enableScroll(); // Восстанавливаем прокрутку при размонтировании компонента
});
const handleLogin = async () => {