From 63a92422fd9a8c767c1173d933cb5dfa241641f6 Mon Sep 17 00:00:00 2001 From: andrei Date: Sat, 5 Oct 2024 10:15:02 +0500 Subject: [PATCH] ._. --- src/AppRouter.jsx | 2 +- src/AuthContext.jsx | 11 ++--------- src/api.jsx | 25 +++++++++++++++++++++---- src/pages/Login.jsx | 8 +++++++- 4 files changed, 31 insertions(+), 15 deletions(-) diff --git a/src/AppRouter.jsx b/src/AppRouter.jsx index e11411a..53e7006 100755 --- a/src/AppRouter.jsx +++ b/src/AppRouter.jsx @@ -6,7 +6,7 @@ const RoutesComponent = () => ( } /> }> - + ); diff --git a/src/AuthContext.jsx b/src/AuthContext.jsx index 318ecde..ac996e2 100644 --- a/src/AuthContext.jsx +++ b/src/AuthContext.jsx @@ -1,11 +1,3 @@ -import React, { createContext, useContext, useState, useEffect } from 'react'; - -const AuthContext = createContext(); - -export const useAuth = () => { - return useContext(AuthContext); -}; - export const AuthProvider = ({ children }) => { const [isAuthenticated, setIsAuthenticated] = useState(() => { const savedAuth = localStorage.getItem('isAuthenticated'); @@ -18,6 +10,8 @@ export const AuthProvider = ({ children }) => { const logout = () => { setIsAuthenticated(false); + localStorage.removeItem('token'); + localStorage.removeItem('isAuthenticated'); }; useEffect(() => { @@ -30,4 +24,3 @@ export const AuthProvider = ({ children }) => { ); }; - diff --git a/src/api.jsx b/src/api.jsx index 5dd4675..05e5849 100755 --- a/src/api.jsx +++ b/src/api.jsx @@ -2,14 +2,15 @@ import axios from 'axios'; const API_URL = 'http://localhost:8000/api'; +const getAuthToken = () => { + return localStorage.getItem('token'); +}; + export const loginUser = async (loginData) => { const params = new URLSearchParams(); params.append('grant_type', 'password'); - params.append('username', loginData.login); // Используем login и password из переданных данных + params.append('username', loginData.login); params.append('password', loginData.password); - // params.append('scope', ''); - // params.append('client_id', 'string'); - // params.append('client_secret', 'string'); try { const response = await axios.post(`${API_URL}/token`, params, { @@ -25,3 +26,19 @@ export const loginUser = async (loginData) => { throw error.response ? error.response.data : error; } }; + +export const getAccessories = async () => { + try { + const token = getAuthToken(); + const response = await axios.get(`${API_URL}/accessories`, { + headers: { + 'Authorization': `Bearer ${token}`, + 'Accept': 'application/json', + }, + }); + return response.data; + } catch (error) { + console.error('Ошибка при запросе аксессуаров:', error.response ? error.response.data : error); + throw error.response ? error.response.data : error; + } +}; diff --git a/src/pages/Login.jsx b/src/pages/Login.jsx index 23c9f0e..6722402 100644 --- a/src/pages/Login.jsx +++ b/src/pages/Login.jsx @@ -1,17 +1,23 @@ import React, { useState } from 'react'; import { loginUser } from '../api'; +import { useNavigate } from 'react-router-dom'; +import { useAuth } from '../AuthContext'; // Подключаем AuthContext const Login = () => { const [login, setLogin] = useState(''); const [password, setPassword] = useState(''); const [error, setError] = useState(''); + const navigate = useNavigate(); + const { login: authenticate } = useAuth(); // Вытаскиваем метод login из контекста const handleSubmit = async (e) => { e.preventDefault(); try { const userData = await loginUser({ login, password }); - + localStorage.setItem('token', userData.access_token); + authenticate(); + navigate('/'); } catch (error) { setError(error.detail ? error.detail : 'Ошибка авторизации'); }