我在寫一些瀏覽器端的動態功能,並使用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