【问题标题】:Laravel TokenMismatchException caused in routes/web.php在 routes/web.php 中导致 Laravel TokenMismatchException
【发布时间】:2017-12-09 02:34:15
【问题描述】:

我正在通过查看DevDojo 创建的教程在Laravel 5.4 中学习Routing。在routes/web.php 中使用以下代码将出现TokenMismatchException 错误,并且在我按下提交按钮后我的代码不起作用:

Route::post('test', function () {
    return 'Printed by the route responsible for test post action.';
});

Route::get('test', function () {
    echo '<form method="post" action="test">';
    echo '<input type="submit">';
    echo '</form>';
});

我在这里搜索了同一个论坛以及网络上的其他地方,例如 laravel.iolaracasts.com,每个人都在谈论 Laravel 尝试检测正在发出的请求的 session 时出现的问题。
我尝试通过将以下几行添加到 Route::get 规则来解决问题,但问题没有得到解决:

echo '<input type="hidden" name="_method" value="post">';
echo '<input type="hidden" name="_token" value="csrf_field();">';

我希望您通过告诉我如何正确使用csrf_field()csrf_token() 或路由文件中所需的任何其他内容来帮助我解决此问题。

非常感谢您。

【问题讨论】:

  • csrf 令牌将无法通过添加为字符串来工作。试试这个value="'.csrf_token().'"
  • 如果你尝试这个 echo '
    {{ csrf_field() }}
    ' 会发生什么;
  • Check Answer 用于令牌不匹配解决方案。

标签: php laravel csrf


【解决方案1】:

我认为你在隐藏输入的正确轨道上(如果你有一个全新的 Laravel 安装,否则请确保检查令牌未被禁用);

我建议你使用 Laravel 的(官方)Form Builder 来处理表单 (have a look here)。

之后看看here:

(1) {{ Form::open(array('url' => 'profile')) }} 你的表单内容在这里 {{ Form::close() }}

(2) 确保输出令牌:echo Form::token();(在关闭表单之前)

(3) 最后,注册一个 POST Route,用于检查令牌:

Route::post('profile', array('before' => 'csrf', function() { // }));

或者,您可以直接将表单操作指定给函数(我个人最喜欢的):

echo Form::open(array('action' =&gt; 'Controller@method'))

【讨论】:

  • 尊敬的先生,感谢您提供的精彩链接。它肯定会帮助我更好地使用这个框架。
【解决方案2】:

csrf_token() 只是给你令牌。

csrf_field() 为您构建整个输入字段。

示例:

{{ csrf_token() }} // 输出:SomeRandomString

{{ csrf_field() }} // 输出:&lt;input type="hidden" name="_token" value="SomeRandomString"&gt;

在您的问题中: 使用

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

而不是

<input type="hidden" name="_token" value="csrf_field();">;

另一方面

你可以使用

echo csrf_field();

{{ csrf_field() }} 

【讨论】:

  • 亲爱的朋友,正如您所说,我应该注意每个功能的使用。我更改了我的代码并在结束表单之前添加了echo csrf_field;,它现在工作得很好。再次感谢你。你拯救了我的一天。
猜你喜欢
  • 1970-01-01
  • 2017-07-22
  • 2017-11-23
  • 2015-10-04
  • 2016-12-24
  • 1970-01-01
  • 2016-01-25
  • 2016-03-06
相关资源
最近更新 更多