Существует ли кросс-браузерный способ игнорирования ошибок 401, вызванных XHR?

Пытаясь сохранить как можно более чистый подход REST, я решил, что приложением будет API - вплоть до последней капли.

К сожалению, я достиг одного камня преткновения. После написания обработчика дайджест-аутентификации на PHP я обнаружил, что не могу сделать его таким же удобным для пользователей в веб-браузерах, как метод аутентификации на основе форм.

Причина этого заключается в том, что, хотя я могу смоделировать ответ аутентификации дайджеста через Javascript, используя имя пользователя и пароль из формы HTML (я могу дать nonce значения в сценарии безопасно, в зависимости от способа их генерации), при сбое браузер по-прежнему отображает стандартное, некрасивое приглашение аутентификации.

Есть ли способ обойти это? Более ранний вопрос ссылки mozBackgroundRequest, но это вряд ли кросс-браузер.

Спасибо!

1 ответ

Решение

Сначала вы можете сделать запрос в AJAX, чтобы убедиться, что предоставленные детали аутентификации работают.

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

РЕДАКТИРОВАТЬ

Если вы управляете процедурой аутентификации в PHP (и если аутентификация завершается неудачно, вероятно, выполняется header('HTTP/1.1 401 Unauthorized'); и т.д.) вы можете просто... не делать этого. Вместо этого ответьте обычным 200 ОК, но поместите в текст строку, которую вы можете найти в ajax.responseText (например, "authFailed" или что-то в этом роде).

Вы можете просто добавить заголовок (или файл cookie, или что-то в этом роде) к запросам AJAX, которых нет в обычных запросах браузера, чтобы можно было различать проверки AJAX-аутентификации и обычный сеанс с проверкой подлинности.

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

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