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

时间:2009-05-30 02:56:09

标签: javascript jquery firefox http-authentication

我正在编写一些浏览器端动态功能,并使用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时会出现这个问题,我也很乐意听到那里的解决方案。)

4 个答案:

答案 0 :(得分:36)

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

WWW-Authenticate: None

WWW-Authenticate: FormBased

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

答案 1 :(得分:3)

如果你还没看过:

How can I supress the browser's authentication dialog?

看起来不太有希望:)

答案 2 :(得分:3)

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

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

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

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

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

答案 3 :(得分:1)

我在某处找到了此身份验证弹出问题的解决方法。

WWW-Authenticate: None

不适用于我,但我已添加

'Authorization': 'Basic'

到标题,它就像一个魅力。