Laravel5 CSRF过滤器:返回HTTP 422错误

时间:2015-08-08 08:46:43

标签: laravel laravel-5

当我ajax访问服务器时,我收到422(不可处理的实体)错误。

有谁知道如何修复它?

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

<script>
      $(document).ready(function(){
          $("#frm").submit(function(e){
              e.preventDefault();
              var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');

              $.ajax({
                  type: 'post',
                  url : 'http://example.com/contact',
                  data: {_token: CSRF_TOKEN},
                  dataType: 'JSON',
                  success : function(data){
                      console.log(data);
                  }
              },"json");
          });
      });
</script>

我收到了这个错误。

http://example.com/contact 422 (Unprocessable Entity)

我通过Google Chrome检查了表单数据。看起来好像..

_token:nBfBpE56cFqgmEy94KCji975dZXt3K5MSnlHJT5y

更新

我添加了&#39;地址&#39;参数是通过以下ConvertToInt32的commnet获得的参数。然后我又收到了HTTP 403 (Forbidden) error.

的错误
<script>
      $(document).ready(function(){
          $("#frm").submit(function(e){
              e.preventDefault();
              var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');
              var address = $("textarea#address").val();

              $.ajax({
                  type: 'post',
                  url : 'http://example.com/contact',
                  data: {'_token': CSRF_TOKEN, 'address' : address},
                  dataType: 'JSON',
                  success : function(data){
                      console.log(data);
                  }
              },"json");
          });
      });
</script>

更新

应用\ HTTP \请

<?php namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

abstract class Request extends FormRequest {

    public function authorize()
    {
        // Honeypot 
        return  $this->input('address') == '';
    }

}

ContactRequest

?php namespace App\Http\Requests;

class ContactRequest extends Request {

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'message' => 'required'
        ];
    }

}

请求参数可能没问题。

_token:nBfBpE56cFqgmEy9wKCjixf5dZXt3K4MSnlHJT3y
address:a

1 个答案:

答案 0 :(得分:1)

422 是laravel中通过ajax提交表单时无效数据的自然响应代码。您的数据必须包含请求规则方法中定义的所有字段。 403 表示您无权执行该请求。在您的请求类中,有一个名为authorize()的方法。您可以使用此方法检查用户是否有权发出此请求。如果返回false,则会出现 403 错误。