У меня есть контекст аутентификации, который использует useEffect
для получения данных из sessionStorage и устанавливает глобальную переменную user
для передачи через контекстный api.
На каждом защищенном маршруте у меня есть useEffect
внутри моего ho c, чтобы проверить, вошел ли пользователь в систему, и если он не отправляет пользователя обратно на страницу входа.
Однако useEffect
внутри ho c срабатывает до того, как Контекст аутентификации и, следовательно, не видит данные аутентификации и каждый раз отправляет клиента на страницу входа в систему
const router = useRouter()
const [ user, setUser ] = useState(null)
const [ loading, setLoading ] = useState(false)
useEffect(() => {
async function loadUserFromSessionStorage() {
const token = sessionStorage.getItem('accessToken')
if (token) {
const { data: { customer: { name } } } = await axios.get(`http://localhost:3002/customer/token/${token}`)
if (name) setUser(name)
}
setLoading(false)
}
loadUserFromSessionStorage()
})
useEffect(() => {
if(!!user) router.push('/')
}, [ user ])
return (
<AuthContext.Provider
value={{ isAuthenticated: !!user, loading, user}}
>
{children}
</AuthContext.Provider>
)
}
И это мой HO C:
return () => {
const { user, isAuthenticated, loading } = useContext(AuthContext);
const router = useRouter();
useEffect(() => {
if (!isAuthenticated && !loading){
router.push("/login")
}
}, [ loading, isAuthenticated ]);
return (
isAuthenticated && <Component {...arguments} />
)
};
}
Кто-нибудь знаете, как это решить?