繁体   English   中英

带有RESTFull API Laravel的Angular JS和CSRF

[英]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']);
      });
    });
  });
})();

当我检查它返回200与csrf_token。 但是,CSRF_TOKEN在应用程序中没有设置。console.log(CSRF_TOKEN)返回ReferenceError:CSRF_TOKEN未定义。

知道我在做什么错吗?

非常感谢! :-)

我也在laravel项目中也使用了angular。 这是我的工作,它对我有用:

为了开始角度,我使用了这个(我需要这个[[与刀片{{语法没有冲突。):

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

并且在我的控制器中,我也使用了这个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();
});

在刀片模板中定义CSRF_TOKEN。 将其交付到您的控制器中。 将其用作$ http.post中的Post参数。 这有效:)

如果您有一个,将上面显示的代码移到services.js顶部

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM