我正在Routing
中通过查看由Laravel 5.4
创建的教程来学习DevDojo
。使用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.io
或laracasts.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()
或其他所需内容来帮助我解决问题。
非常感谢你提前。
答案 0 :(得分:3)
csrf_token()
只是为您提供令牌。
csrf_field()
为您构建整个输入字段。
示例:
{{ csrf_token() }}
//输出:SomeRandomString
{{ csrf_field() }}
//输出:<input type="hidden" name="_token" value="SomeRandomString">
: 使用
<input type="hidden" name="_token" value="csrf_token();">;
而不是
<input type="hidden" name="_token" value="csrf_field();">;
另一方面
你可以使用
echo csrf_field();
OR
{{ csrf_field() }}
答案 1 :(得分:1)
我认为你在隐藏输入的正确轨道上(如果你有一个新的Laravel安装,否则确保没有禁用检查令牌);
我建议您使用Laravel的(官方)表单生成器来处理表单(have a look here)。
之后,看看here:
(1)
{{ Form::open(array('url' => 'profile')) }}
你的表格在这里
{{ Form::close() }}
(2)确保输出令牌:echo Form::token();
(在关闭表单之前)
(3)最后,注册一个POST路由,检查令牌:
Route::post('profile', array('before' => 'csrf', function()
{
//
}));
或者,您可以直接指定表单操作(我个人最喜欢的):
echo Form::open(array('action' => 'Controller@method'))