Angular 带有 RESTFull 的 JS 和 CSRF API Laravel

Angular JS & CSRF with RESTFull API Laravel

无法理解如何让它工作...我正在尝试从 API 获取 CSRF 并将其作为常量加载到我的 angularJS 应用程序中。 这是我使用的来自@David Mosher https://gist.github.com/davemo/6141699 的代码 我通过这样做来启动 app.js:

    // Retrieve and inject the CSRF token from the server
(function() {
  var $injector = angular.injector(['ng']); $injector.invoke(function($http,$rootScope) {
    $rootScope.$apply(function() {
      $http.get("http://api.local/auth/csrf_token").then(function(response)
      {
        angular.module("app").constant("CSRF_TOKEN", response.data);
        console.log(CSRF_TOKEN);
        angular.bootstrap(document, ['app']);
      });
    });
  });
})();

当我用 csrf_token 检查它时 return 是 200。但是 CSRF_TOKEN 在应用程序中没有设置...... console.log(CSRF_TOKEN) return ReferenceError: CSRF_TOKEN is not defined....

知道我做错了什么吗??

非常感谢! :-)

我也在我的 laravel 项目中使用 angular。 这是我所做的,对我有用:

用于启动 angular 我使用这个(我需要这个 [[ 因为与 blade {{ 语法没有冲突。):

var laravelApp = angular.module('laravelApp', ['ui.bootstrap', 'ngResource'], function($interpolateProvider) {
    $interpolateProvider.startSymbol('[[');
    $interpolateProvider.endSymbol(']]');
});

在我的 index.blade.php 中,我将 csrf 令牌定义为常量:

@section('javascripts')
    <script>
        angular.module("laravelApp").constant("CSRF_TOKEN", '{{ csrf_token() }}');
    </script>
@endsection

在我的控制器中,我也在 angular 中使用这个 CSRF_TOKEN 常量:

laravelApp.controller('startCtrl', function($scope, $http, CSRF_TOKEN, $window) {

    // init
    $scope.init = function () {
        $scope.template_choose = 'start';
        $scope.loadTemplateURL = '/template/load';
    }

    // POST Request with csrf_token
    $scope.loadActualTemplate = function() {
        $http.post($scope.loadTemplateURL, {
            '_token' : CSRF_TOKEN
        }).then(function(Response) {
            $scope.template_choose = '/template/choose/'+Response.data;
        });
    }

    // start
    $scope.init();
});

Define your CSRF_TOKEN in your blade template. Deliver it in your controller. Use it as a Post Parameter in your $http.post. And this works :)

如果您有

,请将上面显示的代码移至您的services.js之上