Получение статуса 401 в Safari, а не в Chrome в React

Проблема, с которой мы сталкиваемся, заключается в следующем: при использовании Safari в качестве браузера, а не Chrome, мы получаем статус 401 при вызове get api. Мы используем такие технологии, как React и Django Rest Framework. В React мы также используем аксиомы. Опять же, все в порядке, когда мы используем Chrome в качестве нашего браузера (ошибка 401 не выдается, и аутентификация, похоже, в порядке), но когда мы переключаемся на Safari, это не работает. Мы также должны отметить, что при тестировании с Postman, если мы сохраняем токен в нашем заголовке аутентификации, статус 401 не предоставляется (он работает).

Чтобы попытаться решить эту проблему, мы попробовали разные типы классов аутентификации в нашем бэкэнде Django и убедились, что CORS был в наших настройках. Мы также обеспечили соблюдение жизненного цикла компонента React для правильного монтажа и включили соответствующую информацию, необходимую для каждого вызова API. Мы считаем, что это проблема на стороне клиента.

Пожалуйста, посмотрите изображение ниже для краткого описания сетевых запросов / ответов, которые мы видим, и нашего вызова API.

Сетевые ответы и вызов API

Без каких-либо фактических деталей (код, который показывает обработку вашего маршрута, конфигурацию django, сведения об ошибках консоли браузера, сведения о вкладке сети и т. д.), Я просто предполагаю, что вы отклоняете все, что делает предварительная проверка Safari, поэтому проверьте, что консоль браузера и Вкладки сети говорят, и обновите свой пост с некоторой дополнительной информацией.

Mike 'Pomax' Kamermans 24.05.2018 20:04

401 - неавторизованный. Как вы сказали if we store a token in our authentication header no 401 status is given (it works). Может это намек?

Tuğberk Kaan Duman 24.05.2018 20:04
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
10
2
2 911
1

Ответы 1

Итак, оказывается, что корень нашей проблемы заключался в том, что мы не закончили один из наших URL-адресов api косой чертой, в результате чего получилось 301, а затем 304. Chrome смог выполнить автокоррекцию без проблем, но Safari, IE и firefox не могут .

Та же проблема, но я получал код состояния 401 вместо 301/304. Не могу поверить! Safari и iPhone только радуют :(

André Duarte 20.02.2020 18:12

Это спасет мою жизнь! Я просто не могу понять, почему он возвращал 401 на iOS, когда везде работал! Я думал, что это что-то из-за того, что iOS не хранит файлы cookie или что-то в этом роде. Конечный результат, я добавляю косую черту в конце всех URL-адресов, у которых его еще не было. Теперь все работает. Моя настройка такая же: DRF + React, аутентификация через JWT.

Maximiliano Guerra 08.10.2020 20:46

Вау, это было очень полезно. Я не заметил, что хром делает тяжелую работу. Вот почему это не удалось на сафари. Для меня это URL-адрес для извлечения записей: https://forexample.com/users?is_myfriend=true, и, основываясь на вашем ответе, когда я добавил завершающую косую черту, например .../users/?..., тогда он работал нормально. Спасибо.

MwamiTovi 18.06.2021 13:04

Другие вопросы по теме