在laravel 5.3当我从admin注销时,我得到了“TokenMismatchException”

时间:2017-07-24 14:39:07

标签: php laravel

在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() !!}

4 个答案:

答案 0 :(得分:1)

如果我理解正确的问题:

  • 您以“admin”用户身份登录;
  • 你去了表单页面;
  • 您从管理员用户退出;
  • 如果不刷新表单页面,则提交表单并获取TokenMismatchException

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

  

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

当您注销时,您的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"/>

到你的退出表格