2013-05-21 10 views
14

von http://docs.angularjs.org/api/ng. $ Http, es heißt, wir sollten Standard-Header festlegen, um das Token zu enthalten, also ich folge es.eckig, django und csrf

mein Code geht so etwas wie diese

var myapp = angular.module('myapp', ['ngCookies', 'ui.bootstrap']). 
    config(['$routeProvider', function($routeProvider, $httpProvider, $cookies){ 
     $routeProvider. 
      when('/', { 
       templateUrl: '/partials/home.html', 
       controller: HomeCtrl 
      }). 
      when('/game/:gameId/shortlist/create',{ 
       templateUrl: '/partials/create-shortlist.html', 
       controller: CreateShortlistCtrl 
      }). 
      otherwise({redirectTo: '/'}); 
    }]); 

myapp.run(function($rootScope, $http, $cookies, $httpProvider){ 
    $http.get('/api/get-current-user').success(function(data){ 
     $rootScope.current_user = data; 
     $rootScope.current_team = $rootScope.current_user.team; 
    }); 
    $http.get('/api/get-current-season').success(function(data){ 
     $rootScope.current_season = data; 
    }); 
    $rootScope.csrf_token = $cookies.csrftoken; 
    console.log($httpProvider.defaults.headers.common); 
    //$httpProvider.defaults.headers.post['X-CSRFToken'] = $cookies.csrftoken; 
}); 

wie Sie sehen können, habe ich mehrere Ansätze angewandt, aber sind nicht in der Lage Header mit csrf Token einzustellen. die zwei Fehler, die ich angetroffen habe, sind

Uncaught Error: Unknown provider: $httpProviderProvider <- $httpProvider

was mache ich falsch?

Antwort

21

Wenn Sie AngularJS 1.1.3 oder neuer Sie xsrfHeaderName und xsrfCookieName verwenden können:

var myapp = angular.module('myapp', ['ngCookies', 'ui.bootstrap']). 
    config(['$routeProvider', function($routeProvider, $httpProvider, $cookies){ 
    $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken'; 
    $httpProvider.defaults.xsrfCookieName = 'csrftoken'; 
    ... 

Siehe $location in 1.1.3 die Dokumentation.

+0

bessere Methode machen könnte. wie es die Einheit/e2e Tests mit Winkelmesser passiert – debuggerpk

15

Sie können nur die $httpProvider in der Config-Methode verwenden. Aber das Problem ist, dass Sie $cookies in der Config-Methode nicht verwenden können. Dort wird nur $cookiesProvider unterstützt. Das wird (ein bisschen) im Module Loading & Dependencies Abschnitt beschrieben.

Was können Sie tun, eingestellt wird, um die Header zur Laufzeit wie in der

angularjs.org docs vorgeschlagen

So Ihr Beispiel Arbeit zu machen, können Sie wie folgt vorgehen:

var myapp = angular.module('myapp', ['ngCookies', 'ui.bootstrap']). 
    config(['$routeProvider', function($routeProvider){ 
     $routeProvider. 
      when('/', { 
       templateUrl: '/partials/home.html', 
       controller: HomeCtrl 
      }). 
      when('/game/:gameId/shortlist/create',{ 
       templateUrl: '/partials/create-shortlist.html', 
       controller: CreateShortlistCtrl 
      }). 
      otherwise({redirectTo: '/'}); 
    }]); 

myapp.run(function($rootScope, $http, $cookies){ 
    // set the CSRF token here 
    $http.defaults.headers.post['X-CSRFToken'] = $cookies.csrftoken; 

    $http.get('/api/get-current-user').success(function(data){ 
     $rootScope.current_user = data; 
     $rootScope.current_team = $rootScope.current_user.team; 
    }); 
    $http.get('/api/get-current-season').success(function(data){ 
     $rootScope.current_season = data; 
    }); 
}); 

Und vergessen Sie nicht schließen Die Datei angular-cookies.js in Ihrer HTML-Datei!

+1

thankyou, dies funktioniert der Trick – debuggerpk

Verwandte Themen