在laravel 5.3中,当我登录管理员时,我可以从我的项目中提交表单,但是当我从管理员退出并提交相同的表单而不刷新页面时,我得到 TokenMismatchException 。
我的路线:
Route::group(['prefix' => 'admin', 'middleware' => ['backend']], function()
{
Route::get('logout', 'Auth\LoginController@logout')->name('user.logout');
});
我的表格:
{!! Form::open(['route' => ['contactus.store'], 'method'=> 'POST', 'id' => 'contact_us_form']) !!}
<?php echo Form::text('name', NULL, ['placeholder' => 'name', 'class' => 'form-control', 'id' => 'name']); ?>
{!! Form::close() !!}
答案 0 :(得分:1)
如果我理解正确的问题:
在这种情况下,这是预期的行为。来自文档:
此令牌用于验证经过身份验证的用户是否是实际向应用程序发出请求的用户。
当您注销时,您的CSFR变为无效:这就是您需要刷新页面的原因。
您可以通过修改$except
中的VerifyCsrfToken.php
属性来禁用特定URI:
class VerifyCsrfToken extends BaseVerifier
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'your/route',
];
}
答案 1 :(得分:0)
令牌特别禁止您发布相同的表格TWICE。 如果您不想要这种行为,请从表单中删除CSRF令牌。
答案 2 :(得分:0)
首先,当请求为GET
时,您不需要关注令牌
其次,当您使用POST
请求时,您必须在每个请求中保存token
并使用它。
编码方式取决于您的编码。谢谢。
答案 3 :(得分:-1)
你应该添加
<input type="hidden" value="{{csrf_token()}}" name="_token"/>
到你的退出表格