Как предотвратить Safari перехватывать 401 ответов на AJAX-запросы

голоса
9

У меня следующая проблема в расширении Safari. Я прошу, чтобы пользователь предоставил свое имя пользователя / пароль для веб-службы и отправлять быстрый запрос, чтобы проверить, что учетные данные являются правильными. Если они не являются, служба ответит 401, как я считаю, что это должно быть. Проблема заключается в том, что Safari кажется, чтобы перехватить этот ответ перед моими Javascript коды могут обрабатывать его, показывая серое окно для входа вместо того, чтобы позволить мне обработать ошибку.

Что я могу сделать по этому поводу? Я использую библиотеку JS, чтобы сделать вызов, но это функционально эквивалентно следующим JQuery.

$.ajax({
  type: GET,
  url: url,
  username: username,
  password: password,
  success: function() { /* handle success */ },
  error: function() { /* handle error */ }
});
Задан 03/02/2012 в 23:22
источник пользователем
На других языках...                            


2 ответов

голоса
4

Насколько я знаю (после того , как был этот вопрос сам) нет никакого способа , вы получите Safari , чтобы остановить перехват 401. Если эти данные верны, то единственный способ креативно (читай: неправильно) использование другого кода ошибки, например 403, или с помощью пользовательских один (см . Ниже)

Конечно, это предполагает, что у вас есть доступ к изменению кода состояния, посланный от веб-сервиса (это не совсем понятно из вопроса, если вы разработали веб-сервиса, тоже).

403Конечно, на самом деле говорит «вы уже проверку подлинности, но не имеет права доступа к данному ресурсу», который не является правильным (отсюда «неправильное»), но, по крайней мере, он не имеет никаких побочных эффектов в браузерах, которые я знаю ,

400 иногда используется в качестве альтернативы, но так, что один ( «плохой запрос») на самом деле имел в виду, чтобы показать ошибку протокола HTTP, это может вызвать побочные эффекты (никогда не видел и не слышал, как это происходит, но потенциально, это может вызвать сверх- полезная попытка будущего браузера или анти-угон начать устранение неисправностей / диагностик).

412это еще один вариант , который я видел используемый ( «предварительное условие не удалось»), но это на самом деле имеется в виду , чтобы указать , что сервер не дожил до предварительных условий в запрос набора.

Или вы можете сделать свою собственную нестандартную 4xxошибку - например , 461- что разрешено (обратите внимание , что щебет имеет пользовательский 420код состояния, например)

Ответил 04/02/2012 в 01:07
источник пользователем

голоса
3

Более правильный подход был бы продолжать использовать в 401качестве кода ошибки , но не отправлять WWW-Authenticateзаголовок , когда учетные данные были отправлены , но они не были правильными.

Не что больше не вызывает диалоговое окно браузера и позволяет обрабатывать 401непосредственно.

Ответил 08/01/2013 в 11:49
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more