javascript – 如何禁止浏览器的身份验证对话框?
作者:互联网
我的Web应用程序有一个登录页面,通过AJAX调用提交身份验证凭据.如果用户输入正确的用户名和密码,一切都很好,但如果没有,则会发生以下情况:
> Web服务器确定虽然请求包含格式良好的Authorization标头,但标头中的凭据无法成功进行身份验证.
> Web服务器返回401状态代码,并包含一个或多个WWW-Authenticate标头,列出支持的身份验证类型.
>浏览器检测到对XMLHttpRequest对象的调用的响应是401,响应包括WWW-Authenticate标头.然后它会弹出一个身份验证对话框,再次询问用户名和密码.
这一切都很好,直到第3步.我不想弹出对话框,我想要在我的AJAX回调函数中处理401响应. (例如,通过在登录页面上显示错误消息.)我希望用户重新输入他们的用户名和密码,当然,但我希望他们看到我友好,安心的登录表单,而不是浏览器的丑陋,默认验证对话框.
顺便说一下,我无法控制服务器,所以让它返回自定义状态代码(即401以外的东西)不是一种选择.
有什么办法可以抑制身份验证对话框吗?特别是,我可以在Firefox 2或更高版本中禁止“需要验证”对话框吗?有没有办法在IE 6及更高版本中禁止连接到[主机]对话框?
编辑
作者提供的其他信息(9月18日):
我应该补充一点,浏览器的身份验证对话框弹出的真正问题是它给用户提供的信息不足.
用户刚刚通过登录页面上的表单输入了用户名和密码,他认为他已经正确输入了这些用户名和密码,并且他点击了提交按钮或按回车键.他的期望是,他将被带到下一页,或者可能被告知他输入的信息不正确,应该再试一次.但是,他会出现一个意外的对话框.
该对话框未确认他刚输入用户名和密码的事实.它没有明确说明存在问题,他应该再试一次.相反,该对话框向用户显示诸如“网站说:'[领域]’之类的神秘信息.” [领域]是一个只有程序员才能喜欢的短领域名称.
Web broswer设计师注意到:如果对话框本身更加用户友好,没有人会问如何抑制身份验证对话框.我正在登录表单的全部原因是我们的产品管理团队正确地认为浏览器的身份验证对话框太糟糕了.
解决方法:
我不认为这是可能的 – 如果您使用浏览器的HTTP客户端实现,它将始终弹出该对话框.想到两个黑客:
>也许Flash以不同的方式处理(我还没有尝试过),所以有一部flash电影让请求可能有所帮助.
>您可以为您在自己的服务器上访问的服务设置“proxie”,并让它稍微修改一下身份验证标头,以便浏览器无法识别它们.
标签:http-authentication,javascript,ajax 来源: https://codeday.me/bug/20190916/1807190.html