То, что я нашел в качестве рабочего решения, заключалось в том, чтобы обновить объект $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
, где это не нужно.