Итак, я создаю приложение с полным стеком (Express и React), которое использует бэкэнд-куки для аутентификации, а что нет. У меня проблема в Android У меня странное поведение; и, может быть, на любом мобильном устройстве. Вот пример кода:
// React App.js
const App = () => {
const [user, setUser] = useState("");
const [auth, setAuth] = useState(false);
const checkIfLogged = async () => {
console.log('[CHECKIFLOGGED]')
try {
const user = await axios.get('/user/route/', {withCredentials: true})
setAuth(true)
setUser(user.data)
} catch (error) {
console.log(error)
}
};
useLayoutEffect(() => {
checkIfLogged();
})
return(
<>
{components example, not real code}
</>
)
}
Итак, в этом примере после монтирования приложения useEffect () вызывает checkIfLogged (), который отправляет запрос ax ios на сервер и, если cook ie присутствует, пользователь возвращается и устанавливается в состояние. А также состояние 'auth' установлено в true. И эта переменная состояния может управлять условными компонентами, например.
Так вот в чем проблема. В настольном браузере это работает отлично! Нет проблем! Государство настроено правильно; каждый раз, когда страница загружается или обновляется, запускается checkIfLogged (). На Android в мобильном браузере состояние непредсказуемо. Если я открою веб-сайт в своем браузере Android, затем закрою браузер с помощью своих последних Android-приложений (так что проведите полный размах), затем снова откройте мой браузер; сайт загружается как странный способ быстрой загрузки кэша. И когда это происходит, ожидающий топор ios .get () иногда запускается, а иногда и не запускается. Но даже если ax ios .get () не «запускает» setAuth (true) setUser (user.data) после того, как он все равно будет выполняться, как если бы вызов ax ios прошел ... даже если это было никогда не отправлял И я использую morgan на бэкэнде для просмотра всех http-запросов, а топор ios .get не go до конца. Это очень раздражает ... и этот веб-сайт, который я создаю, в основном для меня, чтобы его можно было просматривать в основном на Android ... но, похоже, я не могу найти решение, и в Интернете нет никакой информации об этом.
Любая помощь будет высоко ценится