2017-07-24 77 views
1

在laravel 5.3中,我可以提交表单从我的项目时,我登录管理员,但是当我从管理员注销和提交相同的表单,而不刷新页面我得到a TokenMismatchException在laravel 5.3当我从管理员注销我得到了“TokenMismatchException”

我的路线:

Route::group(['prefix' => 'admin', 'middleware' => ['backend']], function() 
{ 
    Route::get('logout', 'Auth\[email protected]')->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

的可能的复制[?什么是解决laravel令牌不匹配错误的正确方法(https://开头计算器。 com/questions/45223087/what-is-the-way-to-resolve-token-mismatch-error-in-laravel) –

+1

什么是中间件“后端”? – erashdan

回答

-1

你应该添加

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

您注销表单

+0

这是没有必要的,因为HTML表单生成器'Form :: open()'会为你做这件 – morph

+0

我没有注销表单,这是一个get操作。 – Rana

0

令牌是有专门阻止你发布同样的形式TWICE。 如果您不想要这种行为,请从窗体中删除CSRF令牌。

+0

我打开两个标签,当我从标签注销我的令牌将被销毁,如果我返回到第二个标签有窗体(没有刷新它)并提交表单,它会给我这个错误 – Rana

+0

这是一种预期的行为! – delboy1978uk

+0

@ delboy1978uk你认为它更好地向用户显示错误信息吗? – wahdan

0

首先,当请求是GET时,您不需要关心令牌。
其次,当您使用POST请求时,您必须在每个请求中保存token并使用它。 编码方式取决于您的编码。谢谢。

1

如果我理解正确的问题:

  • 您登录为用户“管理员”;
  • 你去表单页面;
  • 您从admin用户注销;
  • 无刷新表单页面,提交表单,并获得TokenMismatchException

在这种情况下,这是预期的行为。从文档:

此令牌用于验证经过身份验证的用户是实际向应用程序发出请求的用户。

当您注销时,您的CSFR将变为无效:这就是为什么您需要刷新页面。

您可以通过VerifyCsrfToken.php修改$except属性禁用它们特定的URI:

class VerifyCsrfToken extends BaseVerifier 
{ 
    /** 
    * The URIs that should be excluded from CSRF verification. 
    * 
    * @var array 
    */ 
    protected $except = [ 
     'your/route', 
    ]; 
} 
+0

是否可以使用$除数组添加路由? 像这条路线('route-to-something'); ? – wahdan

+0

不,你不能在给函数外的属性赋值的时候放一些东西来评估,只有常量 – gbalduzzi

相关问题