import React from 'react' import {Navigate} from 'react-router-dom' import {jwtDecode} from 'jwt-decode' import api from '../api' import {REFRESH_TOKEN, ACCESS_TOKEN} from "../constants"; import {useEffect} from "react"; function ProtectedRoute({children}) { const [isAuthorized, setIsAuthorized] = React.useState(null) useEffect(() => { auth().catch(() => setIsAuthorized(false)) }, []) const refreshToken = async () => { const refreshToken = localStorage.getItem(REFRESH_TOKEN) try { const response = await api.post('token/refresh/', {refresh: refreshToken}) if (response.status === 200) { localStorage.setItem(ACCESS_TOKEN, response.data.access) setIsAuthorized(true) } else { setIsAuthorized(false) } } catch (error) { console.log(error) setIsAuthorized(false) } } const auth = async () => { const token = localStorage.getItem(ACCESS_TOKEN) if (!token) { setIsAuthorized(false) return } try { const decoded = jwtDecode(token) const tokenExpiration = decoded.exp const now = Date.now() / 1000 if (tokenExpiration < now) { await refreshToken() } else { setIsAuthorized(true) } } catch (error) { console.error('Error decoding token:', error); setIsAuthorized(false); } } if (isAuthorized === null) { return