我成功地调用了 Apache 中受基本身份验证(htpasswd 等)保护的目录后面的 URL。 Ajax GET 请求正常工作并返回 protected 内容:
var encoded = Base64.encode(username + ':' + password);
$.ajax({
url: "/app/test",
type: "GET",
beforeSend: function(xhr) {
xhr.setRequestHeader('Authorization', 'Basic ' + encoded);
},
success: function() {
window.location.href = '/app/test.html';
}
});
我最初的假设是,一旦网络 session 成功授权请求,它就可以在“成功” block 中进行重定向,而无需询问用户凭据。调用此代码块时,用户已在不 protected 环境中输入了用户名和密码。但是,当调用重定向时,浏览器将弹出登录/密码窗口。
关于如何使用用户提供的基本授权对 session 进行预授权有什么建议吗?
最佳答案
使用 AJAX 请求记录通常是有效的,因为成功的 AJAX 请求会设置 session cookie,这些 cookie 将在所有后续请求中透明地发送。
也许您的 cookie 已设置,但由于某些原因未透明设置:您可以使用 xhr.getAllResponseHeaders()/xhr.getResponseHeader() 检查,然后使用 document.cookie 设置它们。
如果没有 session cookie,则此行为通常会失败。
您可以尝试在url中使用用户名+密码重定向(不推荐,因为用户名+密码之后可能会在浏览器地址栏中可见):
window.location.href =
window.location.protocol + "//" +
username + ":" + password + "@" +
window.location.hostname +
(window.location.port ? ":" + window.location.port : "") +
'/app/test.html';
您还应该测试延迟重定向...因为它可能有效但您需要给浏览器一些额外的时间,您是否尝试过:
var encoded = Base64.encode(username + ':' + password);
$.ajax({
url: "/app/test",
type: "GET",
beforeSend: function(xhr) {
xhr.setRequestHeader('Authorization', 'Basic ' + encoded);
},
success: function() {
setTimeout(function() {
window.location.href = '/app/test.html';
}, 333);
}
});
关于带有授权 header 的 JavaScript 重定向 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28589224/