【问题标题】:Solving TokenMismatchException in VerifyCsrfToken.php in POST request解决 POST 请求中 VerifyCsrfToken.php 中的 TokenMismatchException
【发布时间】:2016-12-05 11:34:57
【问题描述】:

我对 Laravel 有点陌生。我为 GET 和 POST 创建了一些路由,但唯一可以正常工作的是 GET 路由。 POST 总是返回 TokenMismatchException,即使里面的进程和数据库查询被正确执行。我在 SO 上看到的一些问题通常是在谈论 AJAX,而解决方案涉及到发送令牌。但是我还没有使用任何 AJAX ......而且通常答案说如果我使用普通的 POST 表单,Laravel 会插入一个隐藏的令牌。

这是路线代码:

Route::post('/practice/{level_id?}/{group_id?}/{command?}', 'WebController@practice');
Route::get('/practice/{level_id?}/{group_id?}/{command?}', 'WebController@practice');

这是我在网络控制器上接收它的方式:

public function practice($level_id = "", $group_id = "", $command = "")

有什么问题吗?什么可能使我的 POST 请求失败?谢谢。

【问题讨论】:

  • 发送隐藏的输入字段类似于<input name="_token" type="hidden" value="FaHZmwcnaOeaJzVdyp4Ml8B6l1N1DLUDsZmsjRFL">
  • @ChoncholMahmud 你的意思是<input type="hidden" name="_token" value="{{ csrf_token() }}"> ?
  • 是的,我是认真的。你能给我看看表单域吗?
  • @ChoncholMahmud 哦,添加代码并清除缓存后,现在它可以工作了。我从这个问题stackoverflow.com/questions/30934906/… 中读到的“表单构建器”混淆了普通表单,该问题建议删除令牌。谢谢!

标签: php forms laravel post token


【解决方案1】:

请在您的表单中添加一个隐藏字段。如果您使用 Laravel 表单构建器,那么当您执行 Form::open() 时,它会自动向您的表单添加一个隐藏的令牌字段。
尝试这样的事情:

<input name="_token" type="hidden"  value="{{ csrf_token() }}">

【讨论】:

    【解决方案2】:

    如果你使用Form::open 方法,而新版本的 Laravel 没有提供你必须从here 安装它,那么不会有 TokenMismatchException 的问题。但是如果您使用 HTML5 表单标签,那么您需要在 HTML 表单中添加 {{ csrf_field() }},这将生成

    <input type="hidden" name="_token" value="53sfsffxth7AYe4RFSjzaPf2ygLCecJhbkhblah">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-06
      • 1970-01-01
      • 2016-04-24
      相关资源
      最近更新 更多