如何使用JQuery AJAX阻止Firefox使用HTTP Basic Auth提示用户名/密码?

我正在编写一些浏览器端动态function,并使用HTTP Basic Auth来保护一些资源。 用户体验非常重要,并且高度定制。

这是一个简单的测试JQuery方法,最终将测试用户是否在表单中提供了正确的凭据:

$(document).ready(function() { $("#submit").click(function() { var token = Base64.encode($('#username').val() + ':' + $('#password').val()); $.ajax({ url: '/private', method: 'GET', async: false, beforeSend: function(req) { req.setRequestHeader('Authorization', 'test:password'); }, error: function(request, textStatus, error) { if (request.status == 401) { alert('401'); } } }); return false; }); }); 

如果他们不被允许访问/private ,他们此刻应该只看到警报框。 但是,在Firefox上,会弹出一个浏览器提供的登录表单(使用新凭据重试)。 Safari不会这样做。

我们希望通过自定义表单,淡入淡出,转换等完全控制体验。如何防止Firefox的默认框显示? (如果我们测试IE时会出现这个问题,我也很乐意在那里听到解决方案。)

如果你还没看过:

如何抑制浏览器的身份validation对话框?

看起来不太有希望:)

解决方案是将WWW-Authenticate标头设置为Basic其他标头。 例如,将其设置为:

 WWW-Authenticate: None 

要么

 WWW-Authenticate: FormBased 

如果您使用基于表单的登录。 然后浏览器不会显示登录窗口。

不幸的是,我在这里遇到了同样的问题。

在我看来,浏览器不应该提示xmlhttprequest。 我真的希望有人会推动这一点,因为人们真的想转向jQuery以满足他们的身份validation需求。

好吧,这是我能给你的帮助,我发现了这个jQuery Digest的东西,我不知道它真正做了什么或者其他什么,但是如果有人能够以正确的方式使用这个代码,我们可以有一个jquery摘要auth系统。

https://www.openhub.net/p/digestj

我想用这个方便的新的AuthDigestDomain选项,我们可以重写上面的脚本或者其他任何东西并将安全区域“链接”在一起,我们可以一劳永逸地解决这个问题。 嗯…祝你好运=)