В моем веб-приложении есть страница входа, которая отправляет учетные данные аутентификации через вызов AJAX. Если пользователь вводит правильное имя пользователя и пароль, все в порядке, но если нет, произойдет следующее:
- Веб-сервер определяет, что хотя запрос содержит хорошо сформированный заголовок авторизации, учетные данные в заголовке не проходят проверку подлинности.
- Веб-сервер возвращает код состояния 401 и включает один или несколько заголовков WWW-Authenticate, в которых перечислены поддерживаемые типы аутентификации.
- Браузер обнаруживает, что ответ на мой вызов объекта XMLHttpRequest равен 401, а ответ включает заголовки WWW-Authenticate. Затем он открывает диалоговое окно проверки подлинности, снова запрашивая имя пользователя и пароль.
Все будет хорошо до шага 3. Я не хочу, чтобы диалог всплывал, я хочу, чтобы обработать ответ 401 в моей функции обратного вызова AJAX. (Например, отобразив сообщение об ошибке на странице входа в систему.) Я хочу, чтобы пользователь повторно вводил свое имя пользователя и пароль, но я хочу, чтобы они увидели мою дружескую, заверенную форму входа, а не браузер уродливый, по умолчанию аутентификация.
Кстати, у меня нет контроля над сервером, поэтому, если он возвращает код пользовательского статуса (т.е. что-то, отличное от 401), это не вариант.
Есть ли способ подавить диалог проверки подлинности? В частности, могу ли я подавить диалог проверки подлинности в Firefox 2 или новее? Есть ли способ подавить диалог Connect to [host] в IE 6 и более поздних версиях?
Edit
Дополнительная информация от автора (18 сентября):
Я должен добавить, что реальная проблема при открытии диалогового окна проверки подлинности браузера заключается в том, что он предоставляет пользователю недостаточную информацию.
Пользователь только что ввел имя пользователя и пароль через форму на странице входа, он считает, что он набрал их оба правильно, и он нажал кнопку отправки или нажал кнопку ввода. Его ожидание состоит в том, что он будет взят на следующую страницу или, возможно, сказал, что он неверно ввел свою информацию и должен повторить попытку. Тем не менее, ему вместо этого предлагается неожиданное диалоговое окно.
В диалоговом окне не подтверждается тот факт, что он просто вводил имя пользователя и пароль. В нем четко не указано, что есть проблема и что он должен попробовать еще раз. Вместо этого диалоговое окно предоставляет пользователю криптографическую информацию, например "Сайт говорит:" [realm] ". Где [царство] - это короткое царство, которое может любить только программист.
Разработчики веб-браузеров отмечают: никто не спрашивал, как подавить диалог проверки подлинности, если сам диалог был просто более удобным для пользователя. Вся причина, по которой я делаю регистрационную форму, заключается в том, что наша команда управления продуктами правильно считает, что диалоговые окна проверки браузеров ужасны.