我正在努力建立一个角度的卧铺休息应用程序。我可以得到我的数据库的意见。当我尝试添加新的项目。我收到500错误告诉我不匹配的csrf令牌。
我的表单布局是:
我的表单布局是:
<form class="form-horizontal" ng-submit="addItem()"> <input type="text" ng-model="itemEntry" placeholder="Type and hit Enter to add item"> </form>
$scope.addItem = function(CSRF_TOKEN) { $http.post('/shop',{ text: $scope.itemEntry,csrf_token: CSRF_TOKEN} ).success(function(data,status) { if(data) { var last = _.last($scope.items); _token = CSRF_TOKEN; $scope.items.push({text: $scope.itemEntry,bought: false,id: (last.id + 1) }); $scope.itemEntry = ''; console.log($scope.items); } else { console.log('There was a problem. Status: ' + status + '; Data: ' + data); } }).error(function(data,status) { console.log('status: ' + status); }); }
这是我的应用程序使用的过滤器:
Route::filter('csrf',function() { if (Session::token() != Input::get('_token')) { throw new Illuminate\Session\TokenMismatchException; } });
在我的刀片视图中,我使用它,它的作品:
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
当我使用html表单时,如何发送csrf_token?
谢谢
$http({ method : 'POST',url : '/shop',data : $scope.itemEntry,// pass in data as strings headers : { 'Content-Type': 'application/x-www-form-urlencoded' } });
一个选项是将CSRF令牌注入一个常量。在您的头标中附加以下内容:
<script> angular.module("app").constant("CSRF_TOKEN",'{{ csrf_token() }}'); </script>
然后在您的模块方法中,可以在需要时注入。
app.factory("FooService",function($http,CSRF_TOKEN) { console.log(CSRF_TOKEN); };
也许你会有兴趣了解这个sample Laravel + AngularJS project的源代码。