Angular $ resource transformRequest не меняет заголовок запроса

0

Когда я использую $ resource для входа REST, transformRequest не добавляет заголовок авторизации, как предполагалось. Используя вызов $.ajax, он работает по назначению. Таким образом, используя:

    $scope.login2 = function() {
    function setHeader(xhr){xhr.setRequestHeader("Authorization", "Basic " + btoa($scope.gebruikersnaam + ':' + $scope.wachtwoord))}
    $.ajax({type: "POST",  url: "http://localhost:8000/authview/",  beforeSend: setHeader}).
        fail(function(resp){
            console.log('bad credentials.')
        }).
        done(function(resp){
            console.log('welcome ' + resp.email)
        })
}

Я получаю заголовок авторизации, добавленный в запрос:

Origin: http://localhost
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36   (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36
Authorization: Basic YWRtaW46cGFzc3dvcmQ=

Но когда делаете:

    $scope.login = function() {
  api.auth.login($scope.getCredentials()).
             $promise.
                 then(function(data){
                     // on good username and password
                     $scope.gebruikersnaam = data.username;
                 }).
                 catch(function(data){
                     // on incorrect username and password
                     alert(data.data.detail);
                 });      
};

где "api.auth.login" определяется как:

kmregistratieApp.factory('api', function($resource){
    function add_auth_header(data, headersGetter){
        var headers = headersGetter();
        headers['Authorization'] = ('Basic ' + btoa(data.username + ':' + data.password));
    }
    return {
        auth: $resource('http://localhost:8000/authview/', {}, {
            login: {method: 'POST', transformRequest: add_auth_header},
            logout: {method: 'DELETE'}
        }),
        users: $resource('http://localhost:8000/authview/', {}, {
            create: {method: 'POST'}
        })
    };
});

После "заголовков ['Authorization'] = ('Basic' +..." (при отладке) я вижу, что он сидит в headersGetter:

headers: Object
Authorization: "Basic YWRtaW46cGFzc3dvcmQ="
accept: "application/json, text/plain, */*"
content-type: "application/json;charset=utf-8"

Но он не появляется на вкладке "Сеть" при проверке заголовков. Поэтому мой вопрос заключается в том, почему не работает ресурс $ resource, не добавляющий заголовок авторизации?

Теги:
rest

1 ответ

2

TransformRequest не предназначен для изменения заголовков. См. Журнал изменений в AngularJS. Прокрутите немного вниз, и вы увидите следующее:

Функции transformRequest больше не могут изменять заголовки запросов.

Заголовки HTTP могут быть указаны только при использовании $ http. Пример:

$http.post('/someUrl', data, { headers: { 'Authorization': 'Basic'+key } });
  • 0
    Насколько я вижу, это изменение за $ http. В угловых документах для ссылки на $ resource четко указано: функция transform принимает тело http-запроса и заголовки ... Но если это изменение повлияет и на $ resource, то это объяснит поведение, которое я предполагаю (и, возможно, документы должны измениться). для этого)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню