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

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

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

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

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

14 ответов

28 просмотров

ну так напиши

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 Автор вопроса

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

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

зачем же переименовывать ? чтобы кол-во участников возросло или вдруг IBM от этого снова на свифте начнет кодить ? Я не понимаю что страшного в том что свифт гавно, если это т...
Oleh Nerzh
10
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
здравствуйте. совершаю вот такую вещь: strcpy(line, (char)current_number); где current number — неподписанный шорт, line — массив чаров. ругань следующая: main.c:29:30: error...
Roberto's Ширгозиев
13
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Добрый день! Подскажите, пожалуйста: какими компетенциями нужно обладать, чтобы претендовать на работу эрланг (отдельная благодарность, если про элексир тоже подскажете) разр...
via ☸️ led
20
Всем привет. Ребят подскажите пожалуйста. Вопрос по дизасемблировани. Начну с начала. У меня есть скомпилированная программа на ГО (я разработчик) - в ней есть защита лицензии...
Zloy
11
Можно попросить небольшое ревью кода? Тут немнога, я ничего интереснее не придумал, чем написать аналог tree в качестве практики с cmake. https://github.com/hrimov/tree-unix/...
Andrew Hrimov
11
Есть вопрос, по идее же эти два варианта работать будут одинаково? (В коде разумеется со стеком работа есть и много) create_cursor: .src equ esp .flags equ esp+4 .hcurs...
Mixail Frolov
4
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Карта сайта