Ошибка сети возникает только тогда, когда пользователь находится в сети AT & T 5Ge И пользователь вошел в систему - PullRequest
0 голосов
/ 03 ноября 2019

Я создал мобильное приложение, используя React Native. Это приложение соединяется с API-интерфейсом REST, который я создал с использованием инфраструктуры Laravel. Этот API размещен на VPS и обслуживается по HTTPS.

Мобильное приложение работает так, как я и ожидаю, за исключением следующего варианта использования:

У пользователя iPhone 8+. Оператор этого пользователя - AT & T. 5Ge, чтобы быть точным. Этот пользователь может загрузить приложение и установить его без проблем. Когда они открывают приложение, оно подключается к API и получает данные для отображения на главном экране. Пользователь может войти в систему, используя свои учетные данные, которые отправляются в API, и API возвращает маркер доступа при действительном входе в систему.

Каждый последующий запрос отправляется с заголовком авторизации: Bearer [токен] Эти запросы, в частности, никогда не достигают сервера. Все аутентифицированные маршруты для API недоступны для этого пользователя.

У пользователей других сетей, таких как Verizon и TMobile, такой проблемы нет.

Мобильное приложение использует библиотеку Axios для отправки HTTP-запросов. Таймаут 25000 (максимум, что может быть отправлено на iOS?) Передается в качестве опции для аутентифицированного действия. Действие не выполнено для этого пользователя.

Ошибка перехватывается, а затем отправляется в открытый маршрут по API без заголовка авторизации в запросе. Этот запрос достигает сервера и добавляет сообщение об ошибке из запроса от мобильного приложения в журнал ошибок на моем сервере.

Когда я проверяю ошибку, возникшую из-за сбоя аутентифицированного действия, он читает «Сетевая ошибка» с кодом 0.

Если тайм-аут установлен на 15000, ошибкаВ результате сбоя аутентифицированного действия произошла ошибка тайм-аута, превысившая 15000.

Я связался с AT & T сегодня, и они сказали, что мы должны связаться с Apple.

После того, как они подключили нас к Apple, Apple сказала, что проблема звучит так, как будто это проблема сотовой связи, и предложила запустить диагностику на телефоне.

Мой вопрос таков: почему запросы, содержащие маркер носителя заголовка авторизации, не могут достичь моего сервера, когда пользователь находится в сети AT & T. Токен-носитель делает запрос громоздким и замедляет запрос туда, куда наши башни не могут его отправить? Или у AT & T есть какое-то промежуточное программное обеспечение, которое по какой-то причине могло бы уничтожить запрос? Может ли заголовок авторизации заставить AT & T обрабатывать запрос по-другому и отправлять его другим способом, и таким образом ошибки DNS могут привести к сбою запроса таким способом.

Пожалуйста, помогите, надеюсь, я объяснил это достаточно хорошо.

Редактировать: Laravel Passport генерирует access_token для аутентифицированного API длиной более 1000 символов. Похоже, я могу уменьшить это примерно вдвое. Я собираюсь попробовать это дальше.

1 Ответ

0 голосов
/ 03 ноября 2019

Я считаю, что это решено сейчас.

Я сделал две вещи. Я сбросил ключи Laravel Passport с указанной длиной - 1024. Это привело к тому, что мои токены доступа были длиной около 557 символов вместо 1000 +

Я также внес некоторые DNS-изменения в свой поддомен. Сканирование, которое я сделал, показало ошибку несоответствия родительского сервера имен между поддоменом и родительским доменом. Я внес изменения и получил эти предупреждения, чтобы уйти.

Это то, что я сделал. Два моих пользователя приложения, которые работают в сети AT & T, протестировали приложение сегодня вечером после того, как я внес эти изменения. Они вошли в систему. Открыл таймер. Синхронизация. И этот запрос поступил на мой сервер, как и предполагалось, с новым более коротким токеном доступа.

Я не знаю, какая из этих двух вещей исправила эту проблему. Но я бы, наверное, предположил, что проблемы с DNS я решил. Я все еще нахожу странным, что проблема возникала только в сети AT & T при использовании токена авторизации в заголовке запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...