javascript – 如何禁止浏览器的身份验证对话框?

我的Web应用程序有一个登录页面,通过AJAX调用提交身份验证凭据。如果用户输入正确的用户名和密码,一切都很好,但如果没有,会发生以下情况:

> Web服务器确定虽然请求包含格式正确的授权头,但头中的凭据未成功验证。
> Web服务器返回401状态码,并包括一个或多个列出所支持的身份验证类型的WWW-Authenticate头。
>浏览器检测到对XMLHttpRequest对象的调用的响应是401,并且响应包括WWW-Authenticate头。然后弹出一个认证对话框,再次询问用户名和密码。

这是所有细节,直到第3步。我不想对话框弹出,我想要处理401响应在我的AJAX回调函数。 (例如,通过在登录页面上显示错误消息。)我想让用户重新输入他们的用户名和密码,当然,但我希望他们看到我友好,令人放心的登录表单,而不是浏览器的丑陋,默认认证对话框。

顺便说一下,我不能控制服务器,所以让它返回一个自定义状态代码(即除了401之外的东西)不是一个选项。

有什么办法,我可以禁止身份验证对话框?特别是,我可以在Firefox 2或更高版本中禁止“需要验证”对话框吗?有没有办法抑制连接到[主机]对话框在IE 6和更高版本?

编辑
作者的其他信息(9月18日):
我应该补充说,浏览器的验证对话框弹出的真正的问题是它给用户不足的信息。

用户刚刚通过登录页面上的表单输入了用户名和密码,他相信他已经正确输入了他们,他点击了提交按钮或按回车。他的期望是,他会被带到下一页或者可能告诉他他输入了他的信息不正确,应该再试一次。然而,他却被提供了一个意想不到的对话框。

对话框没有确认他刚刚输入了用户名和密码。它没有清楚地说,有一个问题,他应该再试一次。相反,对话框向用户提供了诸如“网站说:”[realm]“之类的隐藏信息。其中[realm]是一个只有程序员可以爱的短域名。

Web broswer设计师注意:没有人会问如何抑制认证对话框,如果对话框本身只是更加用户友好。我正在做一个登录表单的全部原因是我们的产品管理团队认为浏览器的身份验证对话框是可怕的。

我不认为这是可能的 – 如果你使用浏览器的HTTP客户端实现,它将总是弹出该对话框。两个黑客的想法:

>也许Flash处理不同(我还没有尝试),所以有一个闪光电影使请求可能有帮助。
>您可以为您在自己的服务器上访问的服务设置“代理”,并让它修改身份验证标头一点,以便浏览器无法识别它们。

http://stackoverflow.com/questions/86105/how-can-i-supress-the-browsers-authentication-dialog

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:javascript – 如何禁止浏览器的身份验证对话框?