我在写一些浏览器端的动态功能,并使用HTTP Basic Auth来保护一些资源。用户体验非常重要,并且高度自定义。如何通过HTTP Basic Auth和JQuery AJAX来阻止Firefox提示用户名/密码?
这里有一个简单的测试,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浏览器,我很乐意听到的解决方案在那里,太)
请注意后续在http://stackoverflow.com/questions/928967/can-i-coerce-apache-into-not-including-a-www-authenticate-header-for-failed-http。 – 2009-05-30 04:49:32