Jel*_*rik 6 javascript basic-authentication
我想将HTTP基本身份验证标题存储在身份验证cookie中,这样我就不必在后续请求中处理授权头(我正在使用jQuery):
authenticate: function(auth) {
var header = "Basic " + $.base64.encode(auth.username + ":" + auth.password);
document.cookie = "Authorization: " + header;
$.ajax({
type: "GET",
url: "http://someurl",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: auth.success,
error: auth.error
});
},
Run Code Online (Sandbox Code Playgroud)
虽然这似乎适用于第一个登录的用户,但它对浏览器会话中的任何其他用户都不起作用,因为后续的授权标头已添加但未被覆盖.我知道可以使用name=value语法覆盖cookie ,但此语法不适用于授权标头.
一旦新用户登录,有没有办法摆脱旧的授权标头?
任何帮助,将不胜感激.谢谢,JeHo
Jel*_*rik 12
似乎它对第一个用户也不起作用.问题是,授权标头可能是早先由浏览器设置的(当我使用浏览器的身份验证对话框时).
我现在正在做的是将登录信息存储在标准name = value cookie中并手动设置授权头.
设置cookie:
var header = "Basic " + $.base64.encode(auth.username + ":" + auth.password);
document.cookie = "Authorization=" + header;
Run Code Online (Sandbox Code Playgroud)
阅读cookie:
function getAuthCookie() {
var cn = "Authorization=";
var idx = document.cookie.indexOf(cn)
if (idx != -1) {
var end = document.cookie.indexOf(";", idx + 1);
if (end == -1) end = document.cookie.length;
return unescape(document.cookie.substring(idx + cn.length, end));
} else {
return "";
}
}
Run Code Online (Sandbox Code Playgroud)
设置授权标头:
$.ajax({
type: "GET",
url: "http://someurl",
contentType: "application/json; charset=utf-8",
beforeSend: function(xhr) {
xhr.setRequestHeader("Authorization", getAuthCookie());
},
dataType: "json",
success: auth.success,
error: auth.error
});
Run Code Online (Sandbox Code Playgroud)
这看起来有点尴尬,但它确实有效.
| 归档时间: |
|
| 查看次数: |
21026 次 |
| 最近记录: |