2016-05-31 2 views
0

Я работаю над приложением Django-Angular, и вам нужно сделать так, чтобы токены csrf находились во всех сообщениях Angular AJAX или отправляли запросы. Я использую ngCookies, но когда я пытаюсь присвоить маркер печенье CSRF для всех угловых почтовых заголовков, он дает мне ошибку:

TypeError: Cannot read property 'csrftoken' of undefined 

$ CookieStore также является неопределенным, и использованием получить методы $ куков не также работает. Я загружаю правильный скрипт для угловых куки, который соответствует моей версии углового, и я не получаю никаких ошибок относительно самих ngCookies, поэтому я не совсем уверен, что это может быть?

(function() { 
    'use strict'; 

Config.$inject = ["$locationProvider", "$stateProvider", "$urlRouterProvider", "$httpProvider"]; 
angular 
    .module('app.guest', [ 
     'app.common', 
     'app.core', 
     'app.repo', 
     'ui.bootstrap', 
     'ngCookies' 
    ]) 
    .config(Config); 
    .run(['$cookies'], function ($rootScope, $http, $cookies) { 
      // set the CSRF token here 
      $http.defaults.headers.post['X-CSRFToken'] = $cookies.csrftoken; 
     }) 

/** ngInject */ 
function Config($locationProvider, $stateProvider, $urlRouterProvider, $httpProvider, $cookies) { 

    broadcastReady.$inject = ["CommonService", "CommonEvents"]; 
    $locationProvider.html5Mode(true); 
    $httpProvider.defaults.xsrfCookieName = 'csrftoken'; 
    $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken'; 
    $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; 
    $httpProvider.defaults.headers.post['X-CSRFToken'] = $cookies.csrftoken; 

консоль

vendor.js:12275 Uncaught Error: [$injector:modulerr] Failed to instantiate module app.guest due to: 
TypeError: Cannot read property 'csrftoken' of undefined 

ответ

1

"$cookies" Добавить в конце Вашего $inject списка:

Config.$inject = ["$locationProvider", "$stateProvider", "$urlRouterProvider", "$httpProvider", "$cookies"]; 

Убедитесь, что вы загружаете angular-cookies.js тоже.

+0

Это, похоже, не сработало. Я предполагаю, что вы не можете внедрять службы в конфигурацию модулей, вы должны ввести их в блок запуска модулей. Даже после этого, однако, он все еще появляется как неопределенный. – JBT

+0

А я не понимал, что вы запускаете это внутри 'config()', и то, что вы пытаетесь сделать, это добавить 'X-CSRFToken' в ваши заголовки POST. В этом случае установка 'xsrfCookeName' и' xsrfHeaderName' должна быть достаточной, и вам не нужно явно указывать cookie в 'headers.post' –

+0

Ahhhh, поэтому, когда я устанавливаю $ httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken'; который уже установит значение cookie для любого заголовка сообщения? – JBT

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