13

我正在编写一些浏览器端动态功能并使用 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

4 回答 4

37

The solution is to set the WWW-Authenticate header to something other than Basic. For example set it to:

WWW-Authenticate: None

or

WWW-Authenticate: FormBased

if you use form based login. Then the browser will not show you a login window.

于 2013-09-30T19:27:16.640 回答
4

如果您还没有阅读它:

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

看起来不太有希望:)

于 2009-05-30T03:18:10.463 回答
3

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

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

好吧,这是我可以给你的帮助,我发现了这个 jQuery Digest 的东西,我不知道它到底做了什么或什么,但如果有人能以正确的方式使用这段代码,我们可以有一个 jQuery Digest 身份验证系统。

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

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

于 2009-07-25T01:41:45.930 回答
1

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

WWW-Authenticate: None

对我不起作用,但我添加了

'Authorization': 'Basic'

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

于 2019-07-16T20:41:09.203 回答