【问题标题】:TokenMismatchException: in VerifyCsrfToken.php line 33 using LaravelTokenMismatchException:在 VerifyCsrfToken.php 第 33 行使用 Laravel
【发布时间】:2019-09-23 15:36:48
【问题描述】:

尽管在 Stack OverFlow 中搜索并尝试了类似发布的问题中建议的所有内容,但我仍在努力通过此异常。

我已经接管了这个网站,并负责让它在 AWS 上运行。目前,我没有做任何冒险的事情,只是简单地将大量内容复制到 Linux AWS VM 上,该 VM 运行 Apache、PHP、beantalk、Laravel 和 MariaDB。

该站点设置为使用数据库作为Session 和Cache Driver。我尝试将其更改为 file 和 cookie,但两者都没有区别。

我已确保key:generate 已运行并存储在.env 文件中。我已经尝试了表单中csrf_token 输出的所有不同版本,但无济于事。

我很抱歉针对同一问题发布另一个问题,但希望有其他想法可以帮助我。

我表单中的一个 sn-p....

<form method="post" accept-charset="utf-8" autocomplete="off">
    <meta name="csrf-token" content="{{ csrf_token() }}">
    <div class="form-group">
        .......
</form>

根据@Script47 的建议,我修改了我的表单,但遗憾的是,这不起作用:

<form method="post" accept-charset="utf-8" autocomplete="off">
    {!! csrf_field() !!}
    <div class="form-group">
        .......
</form>

更多片段:

路由 - web.php

Route::any('/signup', ['as' => 'jobseeker.signup', 'uses' => 'Jobseeker\JobseekerController@signup']);

控制器

        if ($this->request->isMethod('POST'))
        {
            $rules = [
                'email'    => 'email|required|unique:jobseekers,email',
                'password' => 'required|min:6|confirmed',
            ];

            $validation_messages = ['email.unique' => trans('messages.auth.email.unique.validation', ['login' => route('jobseeker.login'), 'forgot' => route('jobseeker.forgot')])];
            $validation = Validator::make($this->request->all(), $rules, $validation_messages);

            if ($validation->passes())
            {
                Unsubscriber::remove($this->request->get('email'));
                $jobseeker = Jobseeker::register($this->request->get('email'), $this->request->get('password'));
                $jobseeker->sendRegistrationNotification();
                $this->auth->login($jobseeker);
                return redirect()->route('account.details');
            }

疯狂的是,这在现场环境中有效。但是由于我复制了代码并在 AWS 上重新设置它,所以不起作用。

【问题讨论】:

  • "VerifyCsrfToken.php" 是哪个文件,在Illumination包中,第33行只包含protected $except = [];
  • 是的,发光包之一。但在我的第 33 行是抛出异常的地方:throw new TokenMismatchException;
  • 您是否使用 Ajax 发布表单?因为没有动作
  • 不@CaddyDZ。单击注册按钮时的简单 POST。
  • 您发帖的网址在哪里?表单数据如何到达后端?路线在哪里?

标签: php linux laravel laravel-5 exception


【解决方案1】:

你做错了,根据documentation:

每当您在应用程序中定义 HTML 表单时,您应该在表单中包含一个隐藏的 CSRF 令牌字段,以便 CSRF 保护中间件可以验证请求。您可以使用 csrf_field 帮助器来生成令牌字段:

应该是这样的:

{{ csrf_field() }}

以您的形式。 meta标签一般是供AJAX请求引用token的。

【讨论】:

  • 在最近的 Laravel 版本中,还有 @csrf Blade 指令。
  • @ceejayoz 是的,从 5.6 开始。
  • OP 使用 5.4 tho
  • 感谢@Script47。对不起,如果我不清楚,但我也试过这个,但这也没有用。正如你所提到的,我已经修改了我的表格。
  • 是的,我已经尝试清除 cache、view 和 config,但仍然无济于事。
【解决方案2】:

在你的表单标签下方定义它:)

 @csrf

【讨论】:

  • 这行不通。该指令在 5.6 中引入,OP 在 5.4 中。
  • 谢谢,但正如@Script47 正确指出的那样,我必须使用 5.4 并且到目前为止似乎没有任何效果。
猜你喜欢
  • 2017-07-29
  • 2016-03-20
  • 1970-01-01
  • 2016-10-06
  • 2017-02-21
  • 2017-02-23
  • 2016-07-27
  • 2015-08-19
  • 2016-10-30
相关资源
最近更新 更多