Advertisement
n0d3x

Untitled

Feb 20th, 2025
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.07 KB | None | 0 0
  1. import React, { useEffect, useState } from 'react';
  2. import axios from 'axios';
  3. import { useNavigate } from 'react-router-dom';
  4. import './Main.css';
  5.  
  6. const Login = () => {
  7. const navigate = useNavigate();
  8. const [loading, setLoading] = useState(true);
  9.  
  10. useEffect(() => {
  11. if (window.Telegram && window.Telegram.WebApp) {
  12. window.Telegram.WebApp.ready();
  13.  
  14. const initData = window.Telegram.WebApp.initDataUnsafe;
  15.  
  16. if (!initData || !initData.user) {
  17. alert('Не удалось получить данные пользователя. Убедитесь, что вы используете веб-приложение в Telegram.');
  18. setLoading(false);
  19. return;
  20. }
  21.  
  22. const telegramId = initData.user.id;
  23. console.log('Полученный telegram_id (КЛИЕНТ):', telegramId);
  24. if (!telegramId) {
  25. alert('Не удалось получить telegram_id. Пожалуйста, попробуйте еще раз.');
  26. setLoading(false);
  27. return;
  28. }
  29.  
  30. const authenticateUser = async () => {
  31. try {
  32. const response = await axios.post(`${process.env.REACT_APP_API_URL}/api/telegram-login`, {
  33. telegram_id: telegramId,
  34. });
  35.  
  36. const { full_name, user_id, user_status } = response.data;
  37.  
  38. if (user_status === 'Заблокирован') {
  39. alert('Вы заблокированы. Обратитесь к администратору.');
  40. setLoading(false);
  41. return;
  42. }
  43.  
  44. const rolesResponse = await axios.get(`${process.env.REACT_APP_API_URL}/api/users/${user_id}/role`);
  45. const tasksResponse = await axios.get(`${process.env.REACT_APP_API_URL}/api/tasks?role=${rolesResponse.data.role}&creator=${encodeURIComponent(full_name)}`);
  46.  
  47. localStorage.setItem('user', JSON.stringify({ fullName: full_name, userId: user_id, userStatus: user_status, role: rolesResponse.data.role, tasks: tasksResponse.data }));
  48. navigate('/main');
  49. } catch (error) {
  50. console.error('Ошибка авторизации:', error);
  51. alert('Ошибка авторизации: ' + (error.response?.data?.error || 'Неизвестная ошибка'));
  52. } finally {
  53. setLoading(false);
  54. }
  55. };
  56.  
  57. authenticateUser();
  58. } else {
  59. alert('Не удалось инициализировать Telegram Web App. Попробуйте еще раз.');
  60. setLoading(false);
  61. }
  62. }, [navigate]);
  63.  
  64. return (
  65. <div className="form-container">
  66. <h2>Авторизация через Telegram...</h2>
  67. </div>
  68. );
  69. };
  70.  
  71. export default Login;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement