Аякс:Базовая аутентификация HTTP и файл cookie аутентификации

StackOverflow https://stackoverflow.com/questions/2455492

  •  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
    });

Это кажется немного неуклюжим, но это работает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top