2016-03-15 1 views
0

Наверное, вопрос новичка. Я пытаюсь не на жесткий код xsrfHeaderName и xsrfCookieName, но как их получить от $httpProvider?

.factory('XSRFInterceptor', function($cookies) { 
    return { 
    request: function(config) { 
     config.headers[$httpProvider.defaults.xsrfHeaderName] = 
     $cookies[$httpProvider.defaults.xsrfCookieName]; 
     return config; 
    } 
    } 
}) 

.config(function($httpProvider) { 
    $httpProvider.interceptors.push('XSRFInterceptor'); 
}) 

После проб и ошибок-е изд ряд вещей, мне кажется, что мне еще нужно, чтобы узнать больше о angularjs. Оцените начало перехода.

+0

Вы пытаетесь использовать $ httpProvider в вашей фабрике без впрыскивания. Вы можете попробовать добавить это, у меня есть фрагмент кода, который я использую для этого, если после этого это не сработает. – ribsies

+0

@ribsies, спасибо за ваш ответ. В качестве части моей пробной ошибки я попробовал '.factory ('XSRFInterceptor', function ($ cookies, $ httpProvider) {', но получил 'Uncaught Error: [$ injector: unpr] Неизвестный поставщик: $ httpProviderProvider <- $ httpProvider <- XSRFInterceptor <- $ http <- $ templateFactory <- $ view <- $ state'. Я не уверен, как правильно делать инъекции. Можете ли вы поделиться своим фрагментом кода? – builder

ответ

0

Да, я уверен, что вы не можете ввести $ httpProvider в завод. Я не уверен, какую собственность вы пытаетесь вложить в свои заголовки, но это то, как я делаю такие вещи, и это отлично работает.

app.factory('authInterceptor', ['$rootScope', '$q', '$window', 
    function ($rootScope, $q, $window) { 
    return { 
     request: function (config) { 
     config.headers = config.headers || {}; 
     config.headers.Authorization = $cookies.Authorization; 
     return config; 
     } 
    }; 
}]); 

Что-то вроде этого, в основном просто не используют $ httpProvider.

+0

Цените свой фрагмент кода. «Правильно, что« $ httpProvider »не может быть введен в его перехватчики. Я понял, что создаст циклическую зависимость. Будучи« перехватчиком '$ http', можно получить доступ к« xsrfCookieName »и« xsrfCookieName »(справа на ваш 'Authorization'), который предоставляется' $ httpProvider'? Я не могу найти их в объекте 'config'. – builder

0

По AngularJS 1.4.3, он просто нуждается в линии динамического впрыска:

.factory('XSRFInterceptor', function($cookies, $injector) { 
    return { 
    request: function(config) { 
     var $http = $injector.get('$http'); 
     var xsrfToken = $cookies.get($http.defaults.xsrfCookieName); 
     if (xsrfToken) 
     config.headers[$http.defaults.xsrfHeaderName] = xsrfToken; 
     return config; 
    } 
    } 
} 
Смежные вопросы