VerifyCsrfToken.php Laravel 5.2中的TokenMismatchException

时间:2016-10-06 06:35:45

标签: php laravel laravel-5.2

我在Laravel 5.2项目中遇到了可怕的VerifyCsrfToken错误。

相关代码如下:

引发错误的路线

Route::group(['middleware' => ['web']], function(){
    Route::resource('register', 'RegisterController');
});

当我尝试使用POST请求注册新用户时抛出错误

注册控制器

public function store(Request $request)
{
    return AppUser::create([
        'name' => $request->input('name'),
        'email' => $request->input('name'),
        'contact_number' => $request->input('contact_number'),
        'api_token' => str_random(60),
        'password' => $request->input('password'),
    ]);
}

预期输出

{
  "email": "test.name",
  "contact_number": "654987123",
  "updated_at": "2016-10-06 06:30:26",
  "created_at": "2016-10-06 06:30:26",
  "id": 4
}

使我的问题与其他VerifyCsrf不匹配问题有什么不同,我没有表单来添加{{ csrf_token() }}隐藏字段。我刚刚使用Postman(和curl)发送请求,用户需要注册。

当我在app/Http/Middleware/VerifyCsrfToken.php

上进行以下编辑时
protected $except = [
    '/*'
    //
];

错误消失了,它可以正常工作,但我不认为这是推荐的方式。

由于

1 个答案:

答案 0 :(得分:1)

将令牌存储在根刀片文件中。如果您只使用默认视图,则可能在layout/main.blade.php

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

如果使用jQuery,您现在可以指示它在所有请求标头中包含令牌。

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

如果仍然出现错误,请按以下方式操作:https://gist.github.com/ethanstenis/3cc78c1d097680ac7ef0