169 похожих чатов

Пытаюсь разобраться с аутентификацией в react-router без использования localStorage все работает

ок, но само собой при перезагрузке страницы нужно снова логинится

после добавления localStorage я получаю ошибку:
Error: Too many re-renders. React limits the number of renders to prevent an infinite loop.

вопрос: в каком месте правильно будет писсать и читать токен в localStorage?

14 ответов

52 просмотра

ну так напиши

All-Cats Автор вопроса
Бехруз Б.
ну так напиши

то есть например: в главном компоненте App() я делаю: useEffect(()=>{ const token = localStorage.getItem('token') if (token) { setToken(token) } }) верно?

Посмотри бесплатный курс по аутентификации, там неплохой способ авторизации. Можешь сразу код в гитхабе изучить, посмотреть как делать https://courses.reactsecurity.io/react-security-fundamentals

All-Cats Автор вопроса
🏴‍☠️
Посмотри бесплатный курс по аутентификации, там не...

но в целом такой подход верный? function App() { const { setToken } = useAuth() useEffect(()=>{ const token = localStorage.getItem('token') if (token) { setToken(token) } })

All Cats
но в целом такой подход верный? function App() { ...

Неа. Обычно токен через куки приходит с бэка. Потом его сохраняешь в стейт-менеджере, например

All-Cats Автор вопроса
🏴‍☠️
Неа. Обычно токен через куки приходит с бэка. Пото...

я получаю jwt токен с апи: const handleLogin = async (username, password, callback) => { const data = await postData( '/api/auth', {username: username, password: password} ); setToken(data.access_token); localStorage.setItem('token', token) callback() };

All Cats
я получаю jwt токен с апи: const handleLogin = as...

А дальше как делаешь? Protected routes

All-Cats Автор вопроса

export function RequireAuth({children}) { let auth = useAuth(); let location = useLocation(); if (!auth.token) { // Redirect them to the /login page, but save the current location they were // trying to go to when they were redirected. This allows us to send them // along to that page after they login, which is a nicer user experience // than dropping them off on the home page. return <Navigate to="/login" state={{from: location}} replace/>; } return children; } function App() { const { setToken } = useAuth() useEffect(()=>{ const token = localStorage.getItem('token') if (token) { setToken(token) } }, []) return ( <> <AuthProvider> <Routes> <Route path="/" element={<AppLayout/>}> <Route index element={<Home/>}/> <Route path='storage' element={<RequireAuth><Storage/></RequireAuth>}/> </Route> <Route path="/" element={<AuthLayout/>}> <Route path='login' element={<Login/>}/> </Route> </Routes> </AuthProvider> </> ); }

All-Cats Автор вопроса
All Cats
export function RequireAuth({children}) { let ...

но в этом варианте у меня ошибка: TypeError: Right side of assignment cannot be destructured ругается на строку const { setToken } = useAuth()

А у тебя страницы через React.lazy подгружаются?

All Cats
нет

значит у тебя приложение можно через сорцы девтулза глянуть без аутентификации

я еще не увидел где ты обрабатываешь актуальность токена, если он просрочился, то разлогинить юзера (через axios interceptors проверять токен перед запросом)

All-Cats Автор вопроса

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта