Laravel 5.1 + angular

时间:2016-09-12 21:22:58

标签: angularjs json laravel-5.1 csrf

当用户想要从网站反馈表发送邮件时,我有Laravel 5.1 +角形表发送JSON请求。

我根据此处https://laravel.com/docs/master/csrf的文档填写了表单,无论如何我收到错误消息TokenMismatchException in VerifyCsrfToken.php line 53:

我在stackoverflow上发现了很多主题,但没有真正的解决方案。 有吗?

在我的布局标题中我有

<meta name="csrf-token" content="{!! csrf_token() !!}">
<script>
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });
</script>

然后在我的表格中我有这个

        <form name="callback" ng-controller="callbackController" role="form" class="" enctype="multipart/form-data">
          {!! csrf_field() !!}
    ...
    ...
<button type="submit" class="btn btn-primary pull-right" ng-click="submit(callback.$valid)" ng-bind="submittext" ng-class="{ 'btn-danger': callback.name.$touched && callback.name.$invalid || callback.tel.$touched && callback.tel.$invalid, 'btn-success': callback.name.$touched && callback.name.$valid && callback.tel.$touched && callback.tel.$valid, }">Send</button>

    </form>

这是我的角色

的代码
angular.module('myapp', ['ngMessages', 'angularFileUpload'])

  .controller('callbackController', function($scope, $http, $timeout) {

    $scope.formData = {};
    $scope.url = '/';
    $scope.submittext = 'Отправить';

    $scope.submit = function(isValid) {
      if (isValid) {
          $scope.submittext = 'Отправляем...';
          $http.post($scope.url, 
            {
              "formname": "callback", 
              "name": $scope.name, 
              "tel": $scope.tel, 
              "time": $scope.time, 
              "email": $scope.email, 
              "msg": $scope.msg
            }).
                        success(function(data, status) {
                            console.log(data);
                            $scope.status = status;
                            $scope.data = data;
                            $scope.result = data;
                        });
              $timeout(function() {  
                $('#callback').modal('hide');
                $scope.submittext = 'Отправить';
                $scope.name = null;
                $scope.tel = null;
                $scope.time = null;
                $scope.email = null;
                $scope.msg = null;
                $scope.callback.$setPristine();
                $scope.callback.$setUntouched();
              },    1000);

      } else {
              $('.errors').modal('show');
            }

        }

  })

1 个答案:

答案 0 :(得分:0)

您的代码存在的问题是表单中的第二行

{!! csrf_field() !!}

生成一些代码,如:

<input type="hidden" name="_token" value="ZwiQQ3BJFbWMr4goixtcklwGvpxIeN8vkWNinHIL">

这不是你需要的。

就像您发布的链接一样,您需要在头部区域添加以下行:

<meta name="csrf-token" content="{{ csrf_token() }}">

因为使用ajax,您要添加一个标头,通过查找名为csrf-token

的元标记来选择其值