Вече има няколко въпроса, които изискват потискане на диалоговия прозорец за HTTP удостоверяване на браузъра и те изглежда предполагат, че този диалогов прозорец се появява автоматично, когато кодът на отговора е 401
и заглавката WWW-Authenticate
присъства в отговора.
Създавам уеб приложение, което извиква RESTful API, използвайки Ajax, което е защитено с основно HTTP удостоверяване. Работя както върху уеб приложението, така и върху API.
Поведението по подразбиране е, когато се изисква удостоверяване, но не присъства, просто да се даде грешка
{"error":"Authentication required"}
със статус 404
. Бих искал обаче да създам една крайна точка, /user/login
, която връща кода 401
и заглавката WWW-Authenticate
, когато в заявката няма валидна заглавка Authorization
. Знам, че това не е точно RESTful, но трябва да работи.
Сега внедрих това и когато отворя крайната точка в моя браузър, тя работи добре: показва се диалоговият прозорец на браузъра. Въпреки това, когато поискам крайната точка с помощта на Ajax, не се показва диалогов прозорец (и Chromium, и Firefox).
Как да принудя да показвам този диалогов прозорец с Ajax заявка, ако изобщо е възможно?
Точният отговор сега е:
HTTP/1.1 401 Unauthorized
Server: nginx/1.4.6 (Ubuntu)
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.5.9-1ubuntu4.9
Access-Control-Allow-Origin: http://my-url
Cache-Control: no-cache
Date: Thu, 07 May 2015 12:21:10 GMT
WWW-Authenticate: Basic realm="Please login"
Please login