После авторизации и успешной переадресации на страницу при перезагрузке возвращает на главную
Разрабатываю небольшое приложение (React js - фронтенд, Python3.10 бекенд). Реализовал регистрацию и авторизацию, после которой происходит перенаправление на главную страницу (использую хук useNavigate). При попытке обновить страницу или перейди на другие, которые требуют авторизации, происходит редирект на мою начальную страницу. Не могу понять в чем проблема.
Мой компонент Router:
const AppRouter = () => {
const [base, resources, reg, log] = publicRoutes
const [main, fuzzy_log, fuzzy_graphs] = authRoutes
return (
<Routes>
<Route path={base.path} element={<base.Component/>}/>
<Route path={resources.path} element={<resources.Component/>}/>
<Route path={reg.path} element={<reg.Component/>}/>
<Route path={log.path} element={<log.Component/>}/>
<Route path={main.path} element={
<LoginReq>
{<main.Component/>}
</LoginReq>
}/>
<Route path={fuzzy_log.path} element={
<LoginReq>
{<fuzzy_log.Component/>}
</LoginReq>
}/>
<Route path={fuzzy_graphs.path} element={
<LoginReq>
{<fuzzy_graphs.Component/>}
</LoginReq>
}/>
<Route path="*" element={<Navigate to='/'/>}/>
</Routes>
)
}
Компонент для проверки на авторизацию
const LoginReq = ({children}) => {
const {user} = useContext(Context)
const auth = user.isAuth
{console.log(auth)}
if (!auth) {
return <Navigate to={BASE_ROUTE}></Navigate>
}
return children;
}
Компонент страницы авторизации и регистрации
const Login = observer(() => {
const {user} = useContext(Context)
const location = useLocation()
const isLogin = location.pathname === LOG_ROUTE
const [email, setEmail] = useState('')
const [password, setPassword] = useState('')
const navigate = useNavigate()
const click = async () => {
try {
if (isLogin) {
const response = await login(email, password)
if (response.data.status === 'ok') {
user.setIsAuth(true)
{console.log(response.data.tokens)}
localStorage.setItem('tokens', JSON.stringify(response.data.tokens))
navigate(MAIN_ROUTE)
} else {
alert(response.data.msg)
}
} else {
const response = await registration(email, password)
if (response.data.status === 'ok') {
navigate(LOG_ROUTE)
} else {
alert(response.data.msg)
}
}
} catch (e) {
alert(e)
}
}
return (
<Form className="inputForm">
<Form.Control
className="type-1"
placeholder="Введите email"
value={email}
onChange={e => setEmail(e.target.value)}
/>
<Form.Control
className="type-1"
placeholder="Введите пароль"
type="password"
value={password}
onChange={e => setPassword(e.target.value)}
/>
<Row className="registration">
{isLogin ?
<div>
Нет аккаунта?, <NavLink to={REG_ROUTE}>Регистрация</NavLink>
</div>
:
<div>
Есть аккаунт?, <NavLink to={LOG_ROUTE}>Войдите</NavLink>
</div>
}
<Button className="auth-buttons" onClick={click}>
{isLogin ? 'Войти': 'Регистрация'}
</Button>
</Row>
</Form>
)
})
export default Login;