Я хочу сохранить Базовую аутентификацию HTTP headerline в 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
});
},
Пока это, кажется, работает на первого пользователя, который входит в систему, это не работает ни на каких других пользователей в рамках сеанса браузера, потому что последующие заголовки авторизации добавляются и не перезаписываются. Я знаю, что можно было перезаписать cookie при помощи name=value
синтаксис, но этот синтаксис не относится к заголовку авторизации.
Там какой-либо путь состоит в том, чтобы избавиться от старого заголовка авторизации, после того как новый пользователь входит в систему?
Любая справка ценилась бы. Спасибо, JeHo
Похоже, у первого пользователя тоже не сработало. Проблема заключалась в том, что заголовок авторизации, вероятно, был установлен браузером ранее (когда я использовал диалог аутентификации браузера).
Сейчас я сохраняю информацию для входа в стандартный файл cookie name = value и вручную устанавливаю заголовок авторизации.
Установить куки:
var header = "Basic " + $.base64.encode(auth.username + ":" + auth.password);
document.cookie = "Authorization=" + header;
Прочитать куки:
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 "";
}
}
Установить заголовок авторизации:
$.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
});
Это кажется немного неудобным, но работает.