фикс
This commit is contained in:
parent
0f548c6e38
commit
8b42a81414
@ -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,43 +149,21 @@ 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] Сессия успешно восстановлена, очищаем данные о разблокировке');
|
||||
if (unblockedInfoStr) {
|
||||
try {
|
||||
const unblockedInfo = JSON.parse(unblockedInfoStr);
|
||||
// Отображаем уведомление о разблокировке
|
||||
errorMessage.value = unblockedInfo.message || 'Ваш аккаунт был разблокирован. Пожалуйста, войдите в систему.';
|
||||
// Удаляем информацию о разблокировке, чтобы сообщение не появлялось повторно
|
||||
localStorage.removeItem('accountUnblockedInfo');
|
||||
} else {
|
||||
console.log('[LoginView] Не удалось восстановить сессию, показываем уведомление о разблокировке');
|
||||
|
||||
// Если восстановление не удалось, но есть информация о разблокировке,
|
||||
// отображаем уведомление для пользователя
|
||||
if (unblockedInfoStr) {
|
||||
try {
|
||||
const unblockedInfo = JSON.parse(unblockedInfoStr);
|
||||
// Отображаем уведомление о разблокировке
|
||||
errorMessage.value = unblockedInfo.message || 'Ваш аккаунт был разблокирован. Пожалуйста, войдите в систему.';
|
||||
// Удаляем информацию о разблокировке, чтобы сообщение не появлялось повторно
|
||||
localStorage.removeItem('accountUnblockedInfo');
|
||||
} catch (e) {
|
||||
console.error('[LoginView] Ошибка при парсинге информации о разблокировке:', e);
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('[LoginView] Ошибка при парсинге информации о разблокировке:', e);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
onUnmounted(() => {
|
||||
enableScroll(); // Восстанавливаем прокрутку при размонтировании компонента
|
||||
});
|
||||
|
||||
const handleLogin = async () => {
|
||||
errorMessage.value = '';
|
||||
loading.value = true;
|
||||
|
Loading…
x
Reference in New Issue
Block a user