ну так напиши
то есть например: в главном компоненте App() я делаю: useEffect(()=>{ const token = localStorage.getItem('token') if (token) { setToken(token) } }) верно?
Посмотри бесплатный курс по аутентификации, там неплохой способ авторизации. Можешь сразу код в гитхабе изучить, посмотреть как делать https://courses.reactsecurity.io/react-security-fundamentals
но в целом такой подход верный? function App() { const { setToken } = useAuth() useEffect(()=>{ const token = localStorage.getItem('token') if (token) { setToken(token) } })
Неа. Обычно токен через куки приходит с бэка. Потом его сохраняешь в стейт-менеджере, например
я получаю 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() };
А дальше как делаешь? Protected routes
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> </> ); }
но в этом варианте у меня ошибка: TypeError: Right side of assignment cannot be destructured ругается на строку const { setToken } = useAuth()
А у тебя страницы через React.lazy подгружаются?
значит у тебя приложение можно через сорцы девтулза глянуть без аутентификации
я еще не увидел где ты обрабатываешь актуальность токена, если он просрочился, то разлогинить юзера (через axios interceptors проверять токен перед запросом)
я планировал это делать на беке
Обсуждают сегодня