Мы создаем приложение Ionic с Symfony api, и у нас есть проблема с $ http при входе в iOS. Когда логин или пароль не верны, $ http никогда не получал ответа от api и таймаута 30 секунд спустя со статусом 0, хотя все работает отлично на Android с тем же кодом (ответы api одинаковы независимо от платформы). Мы пробуем много разных вещей, но похоже, что iOS отказывается получить ответ на этот конкретный запрос. Другие запросы работают нормально, ответ и статус принимаются, как ожидалось. Ниже приведен код запроса на вход
$http.defaults.headers.common.Authorization = 'Basic ' + Base64.encode(user + ':' + password);
$http.get("https://myserver.com/api/login")
.success(function(data, status) {
console.log("success");
})
.error(function(error, status) {
console.log("error");
});
Кто-нибудь сталкивался с такой проблемой с iOS или даже знал, как ее исправить (или, по крайней мере, отладить ее!)? Я не знаю, какой код может заставить вас помочь нам, так что дайте мне знать!
РЕДАКТИРОВАТЬ:
Пока не найдено решение, но теперь я понимаю проблему!
Когда HTTP-статус ответа равен 401, он устанавливает заголовок с именем WWW-Authenticate. Но Кордове не нравится этот заголовок (возможно, из-за "" в значении заголовка), поэтому не отправлял ответ на приложение...
Проблема с apache:
https://issues.apache.org/jira/browse/CB-2415
Другая публикация по теме:
Обработка HTTP 401 с помощью WWW-аутентификации в приложении Cordova/Ionic iOS
Итак, теперь моя проблема изменилась: как удалить заголовок из ответа Symfony Http Basic Authentification?
Это немного сложно отлаживать без ошибки, чтобы посмотреть, но вы можете попробовать:
Предполагая, что ваш URL-адрес не основан на https, ваша ошибка, скорее всего, связана с блокировкой ios без HTTP-запросов. Его можно исправить добавлением этого кордового крючка
Попробуйте добавить свой домен в белый список в файле config.xml, как этот <allow-navigation href="https://myserver.com/*"/>
href="*"
для каждого параметра (я также безуспешно href="https://myserver.com/*"
)