111 lines
3.7 KiB
TypeScript
111 lines
3.7 KiB
TypeScript
import { Box, Typography } from '@mui/material';
|
||
import useAuth from '../hooks/useAuth';
|
||
import AuthForm from '../components/Login/AuthForm';
|
||
import MemorySlider from '../components/Login/MemorySlider';
|
||
import { useNavigate } from 'react-router-dom';
|
||
import PopaPopa from '../components/popa-popa';
|
||
import useConfig from '../hooks/useConfig';
|
||
|
||
const Login = () => {
|
||
const navigate = useNavigate();
|
||
const { config, setConfig, saveConfig, handleInputChange } = useConfig();
|
||
const { status, validateSession, refreshSession, authenticateWithElyBy } =
|
||
useAuth();
|
||
|
||
const authorization = async () => {
|
||
console.log('Начинаем процесс авторизации...');
|
||
|
||
if (!config.username.trim()) {
|
||
console.log('Ошибка: не указан никнейм');
|
||
alert('Введите никнейм!');
|
||
return;
|
||
}
|
||
|
||
try {
|
||
// Проверяем, есть ли сохранённый токен
|
||
if (config.accessToken && config.clientToken) {
|
||
console.log('Проверка валидности существующего токена...');
|
||
const isValid = await validateSession(config.accessToken);
|
||
|
||
if (!isValid) {
|
||
console.log('Токен недействителен, пытаемся обновить...');
|
||
const refreshedSession = await refreshSession(
|
||
config.accessToken,
|
||
config.clientToken,
|
||
);
|
||
|
||
if (!refreshedSession) {
|
||
console.log(
|
||
'Не удалось обновить токен, требуется новая авторизация',
|
||
);
|
||
// Очищаем недействительные токены
|
||
saveConfig({
|
||
accessToken: '',
|
||
clientToken: '',
|
||
});
|
||
|
||
// Пытаемся выполнить новую авторизацию
|
||
if (config.password) {
|
||
const newSession = await authenticateWithElyBy(
|
||
config.username,
|
||
config.password,
|
||
saveConfig,
|
||
);
|
||
if (!newSession) {
|
||
console.log('Авторизация не удалась');
|
||
return;
|
||
}
|
||
} else {
|
||
console.log('Требуется ввод пароля для новой авторизации');
|
||
return;
|
||
}
|
||
}
|
||
} else {
|
||
console.log('Токен действителен');
|
||
}
|
||
} else {
|
||
console.log('Токен отсутствует, выполняем авторизацию...');
|
||
// Проверяем наличие пароля
|
||
if (!config.password) {
|
||
console.log('Ошибка: не указан пароль');
|
||
alert('Введите пароль!');
|
||
return;
|
||
}
|
||
|
||
const session = await authenticateWithElyBy(
|
||
config.username,
|
||
config.password,
|
||
saveConfig,
|
||
);
|
||
if (!session) {
|
||
console.log('Авторизация не удалась');
|
||
return;
|
||
}
|
||
}
|
||
|
||
console.log('Авторизация успешно завершена');
|
||
navigate('/');
|
||
} catch (error) {
|
||
console.log(`ОШИБКА при авторизации: ${error.message}`);
|
||
// Очищаем недействительные токены при ошибке
|
||
saveConfig({
|
||
accessToken: '',
|
||
clientToken: '',
|
||
});
|
||
}
|
||
};
|
||
|
||
return (
|
||
<Box>
|
||
<PopaPopa />
|
||
<AuthForm
|
||
config={config}
|
||
handleInputChange={handleInputChange}
|
||
onLogin={authorization}
|
||
/>
|
||
</Box>
|
||
);
|
||
};
|
||
|
||
export default Login;
|