Я работаю над приложением 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
Это, похоже, не сработало. Я предполагаю, что вы не можете внедрять службы в конфигурацию модулей, вы должны ввести их в блок запуска модулей. Даже после этого, однако, он все еще появляется как неопределенный. – JBT
А я не понимал, что вы запускаете это внутри 'config()', и то, что вы пытаетесь сделать, это добавить 'X-CSRFToken' в ваши заголовки POST. В этом случае установка 'xsrfCookeName' и' xsrfHeaderName' должна быть достаточной, и вам не нужно явно указывать cookie в 'headers.post' –
Ahhhh, поэтому, когда я устанавливаю $ httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken'; который уже установит значение cookie для любого заголовка сообщения? – JBT