我正在建立一个访问受限的静态网站。我已将服务器配置为使用 HTTP Basic Auth 保护子文件夹(例如 www.example.com/restricted)。现在,我不想使用标准的浏览器弹出窗口进行登录,因为它很难看,并且不记得会话中的密码。这很丑陋,我提到过吗?=)
所以,我展示了一个 html 表单,并尝试通过 JavaScript 进行身份验证(这里,在 jQuery 的帮助下,但“原始”版本显示了相同的行为)。我正在调用的函数看起来像
try_login = function(username, password){
$.ajax({
url: '/restricted/login.token',
method: 'GET',
beforeSend: function(request) {
request.setRequestHeader(
'Authorization',
'Basic ' + Base64.encode(username + ':' + password));
},
success: function () { window.location='/restricted/'; },
error: function () { $('#error_message').text("Wrong password."); }});
}
现在,身份验证适用于 ajax 请求。如果我使用正确的用户名和密码,“login.token”将正确提供状态码 200,如果我不使用,我会得到 401。
但是浏览器(我测试了 Chrome 28 和 IE 10)在成功回调中的重定向之后再次询问凭据。它似乎没有保存凭据。
我做错了什么,还是这确实是预期的行为?如果是,有没有办法作弊?我真的认为浏览器弹出窗口很丑陋。
由于这是一个静态站点,因此很遗憾,任何需要活动服务器端代码的身份验证方案都不能在这里使用。