【问题标题】:TokenMismatchException in VerifyCsrfToken.php Laravel 5.2VerifyCsrfToken.php Laravel 5.2 中的 TokenMismatchException
【发布时间】:2016-10-06 06:35:45
【问题描述】:

我在 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 = [
    '/*'
    //
];

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

谢谢

【问题讨论】:

  • 您到底想完成什么,是的,根本不推荐添加“/*”。
  • @GauravDave 从上面的代码中,我想做的就是注册用户(这只是一个测试而不是最终版本)所以我使用邮递员在正文中发送所需的数据,链接是localhost:8000/register。我希望将数据输入数据库。
  • 谁反对这个:/
  • 你使用一些javascript吗?还是只是php?如果是php,使用Form helper,它会为你准备csrf。
  • <meta name="csrf-token" content="{{ csrf_token() }}"> 如果您不使用表单,请将其添加到您的刀片中。

标签: php laravel laravel-5.2


【解决方案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

【讨论】:

  • 向您致敬,先生。非常感谢。我按照 github 帖子中的说明进行操作,现在可以在 Postman 上使用。如果我在我的 http 请求中包含一个标头,我的 api 应该可以工作,对吧?
  • 我很高兴这有帮助。
猜你喜欢
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-03
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多