2016-01-14 5 views
1

В моем угловом приложении глобальные $http заголовки не определены для каждого запроса, как это:Как сбросить глобальный заголовок базовой аутентификации в AngularJS?

function useBasicAuth(username, hash) { 
    var encoded = btoa(username + ':' + hash); 
    $http.defaults.headers.common.Authorization = 'Basic ' + encoded; 
} 

Как отключить отправку этой информации, когда, например, пользователь выходит из системы, и аутентификация больше не требуется?

ответ

1

То, что я нашел в качестве рабочего решения, заключалось в том, чтобы обновить объект $http.defaults.headers.common, чтобы он не содержал заголовки.

Пример:

function useBasicAuth(username, hash) { 
    var encoded = btoa(username + ':' + hash); 
    $http.defaults.headers.common.Authorization = 'Basic ' + encoded; 
} 

Это, однако, не будет удалять кэшированные учетные данные из браузера. Чтобы преодолеть это, я сделал простой - и не асинхронный вызов для генерации плохого запроса по назначению.

Это функция для этого в моем accountServices заводе:

function checkAuth(username, hash) { 
    var encoded = btoa(username + ':' + hash); 
    var result = false; 

    $.ajax({ 
     type: "POST", 
     beforeSend: function (request) { 
      request.setRequestHeader("Authorization", 'Basic ' + encoded); 
     }, 
     url: "user/current", 
     statusCode: { 
      401: function() { 
       result = false; 
      }, 
      200: function (response) { 
       result = response; 
      } 
     }, 
     async: false 
    }); 

    return result; 
} 

Для входа пользователя, я называю эту функцию:

function useBasicWithoutAuth() { 
    accountServices.checkAuth('logout','logout'); 
    $http.defaults.headers.common = {Accept: "application/json, text/plain, */*"}; 

} 

Так что это делает, является его первым посылает запросить защищенный URL-адрес с поддельным и несуществующим пользователем, так что это в основном то же самое, как если бы подсказка показалась вам, и вы нажмете «Отменить».

После этого в браузере нет данных с кешированием, мы можем просто удалить заголовки из Angular, поэтому он не отправит никакой информации Authorization, где это не нужно.

Смежные вопросы