我正在编写一些浏览器端动态功能,并使用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时会出现这个问题,我也很乐意听到那里的解决方案.)
解决方案是将WWW-Authenticate
标头设置为其他内容Basic
.例如,将其设置为:
WWW-Authenticate: None
要么
WWW-Authenticate: FormBased
如果您使用基于表单的登录.然后浏览器不会显示登录窗口.