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