Я внедряю аутентификацию в свое приложение, проблема с обновлением состояния не является постоянной, поэтому я перенаправлен обратно на экран входа в систему. Как я могу использовать React Hooks, чтобы проверить, есть ли authToken в local storage
, чтобы держать меня в системе при обновлении.
Это Мой защищенный маршрут Проверяет токены аутентификации
<Route
{...rest}
render={
props=>
authTokens ? (
<Component {...props}/>
) : (
<Redirect
to ={
{
pathname: '/login',
state: {
from: props.location
}
}
}
/>
Это моя Страница входа Функция
function Login(props) {
const [isLoggedIn, setLoggedIn] = useState(false);
const [isError, setIsError] = useState(false);
const [firstName, setUserName] = useState("");
const [password, setPassword] = useState("");
const { setAuthTokens } = useAuth();
function postLogin() {
axios.post("http://10.6.254.22:5000/userinformation/login", {
firstName,
password
}).then(result => {
if (result.status === 200) {
console.log('You have been logged in as user: ' +result.data[0].firstName)
setAuthTokens(result.data);
setLoggedIn(true);
} else {
setIsError(true);
}
}).catch(e => {
setIsError(true);
});
}
if (isLoggedIn) {
return <Redirect to="/" />;
}
Ниже мой Крюк , который содержит состояние
const [authTokens, setAuthTokens] = useState();
const setTokens = (data) => {
localStorage.setItem("authTokens", JSON.stringify(data));
setAuthTokens(data);
}
useEffect(()=> {
let jsonToken = localStorage.getItem('authTokens', JSON.stringify(authTokens))
console.log('JSON TOKEN -----' + jsonToken)
setAuthTokens(jsonToken)
})
Как я могу установить состояние authTokens с переменной local storage
при загрузке, чтобы, когда яобновить состояние не пусто, так что я не выйду из системы при перезагрузке страницы. Также стоит упомянуть, что провайдер контекста настроен так:
<AuthContext.Provider value={{ authTokens, setAuthTokens: setTokens}}>
<ProtectedRoute path="/" exact component={ProfileBox}/>
</AuthContext.Provider>