2015-01-22 2 views
0

Не могу понять, как заставить его работать ... Я пытаюсь получить CSRF из API и загружать его как константу в мое приложение angularJS. Вот код, который я использовал от @David Мошера https://gist.github.com/davemo/6141699 я начинаю app.js, делая это:Угловой JS & CSRF с RESTFull API Laravel

// 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) return ReferenceError: CSRF_TOKEN не определен ....

Любая идея, что я делаю неправильно ???

Большое вам спасибо! :-)

+0

Переехал его верхнюю часть моего файла services.js и он работает сейчас ... – commandantp

ответ

0

Переместить код, приведенный выше на верхней части services.js, если у вас есть один

0

Я также использую угловой в своем проекте laravel. Вот что я делаю, и это работает для меня:

для запуска угловой Я использую это (мне это нужно [[для конфликта с лопастной {{синтаксисом.):

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

В моем индексе .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(); 
}); 

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 :)

+0

, который работает, когда вы надеваете» t использовать Laravel как API RESTful. В противном случае ваша техника не будет работать, поскольку вы используете html-файлы, а не лезвие или php – commandantp