VerifyCsrfToken.php第67行中的TokenMismatchException

Gau*_*hta 48 laravel-5.2

我知道这是Laravel中形式之类的已知错误.但是我在Laravel 5.2中遇到了基本身份验证的问题.

我用Laravel创建了auth;

php artisan make:auth
Run Code Online (Sandbox Code Playgroud)

现在我在我的服务器和本地代码上都有相同的代码副本.在我当地,我没有任何问题.但是在我的服务器上,当我尝试注册用户时,我得到错误说TokenMismatchException in VerifyCsrfToken.php Line 67

我的本地和服务器环境都是同步的,但我在注册时一直收到错误.有关如何解决此问题的任何帮助?

错误的屏幕截图

Sho*_*aza 70

我假设您$this->middleware('auth');在控制器的构造函数中添加了以使身份验证正常工作.如果您使用以下内容,请在您的登录/注册表单下方的顶部添加以下内容{!! Form::someElement !!}:

{!! csrf_field() !!}
Run Code Online (Sandbox Code Playgroud)

或者,如果您在表单中使用输入标记,只需在<form>标记之后添加:

<input type="hidden" name="_token" value="{{ csrf_token() }}">
Run Code Online (Sandbox Code Playgroud)

干杯.


Jay*_*eth 13

我有一个类似的问题,这是一个简单的解决方案.

将其添加到HTML元标记区域:

 <meta name="csrf-token" content="{{ csrf_token() }}">
Run Code Online (Sandbox Code Playgroud)

然后在您的JQuery参考下,添加以下代码:

<script type="text/javascript">
      $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
      });
  </script>
Run Code Online (Sandbox Code Playgroud)

如果您使用HTML表单提交(而不是AJAX),那么您需要:

{{ csrf_field() }} 
Run Code Online (Sandbox Code Playgroud)

在您的表单标签内.


小智 10

我正准备拔出头发!

请在session.php配置中检查您的会话cookie域.有一个域选项必须与您的环境相匹配,并且最好使用.env文件进行配置以进行开发.

'domain' => env('COOKIE_DOMAIN', 'some-sensible-default.com'),
Run Code Online (Sandbox Code Playgroud)


jor*_*imo 9

您需要在HTML文档的部分中使用这行代码,默认情况下可以这样做,它不会造成任何伤害:

<meta name="csrf-token" content="{{ csrf_token() }}" />
Run Code Online (Sandbox Code Playgroud)

在您的表单中,您需要添加此隐藏的输入字段:

<input type="hidden" name="_token" value="{{ csrf_token() }}">
Run Code Online (Sandbox Code Playgroud)

多数民众赞成,为我工作.


小智 8

如果没有任何工作,您可以通过转到App/Http/Middleware/VerifyCsrfToken.php文件并将您的路由添加到protected $ excpt来删除CSRF安全检查.

例如,如果我想从所有路线中删除CSRF保护.

protected $except = [
    '/*'
];
Run Code Online (Sandbox Code Playgroud)

PS虽然是一个很好的做法,包括CSRF保护.

  • 这是一个坏主意,不会回答帖子,也不会让每个人都相信这是一个解决方案。您的解决方案就像说“不要介意安全措施,只需忽略它们”,而没有说明为什么禁用 csrf 保护是个坏主意。 (2认同)

Man*_*kar 7

我在laravel 5.4上运行的应用程序遇到了同样的问题

php artisan session:table
php artisan make:auth
php artisan migrate
Run Code Online (Sandbox Code Playgroud)

..然后以下命令为我工作:)

chmod 777 storage/framework/sessions/
Run Code Online (Sandbox Code Playgroud)

如果您将SESSION_DOMAIN(在.env中)设置为与HOST_NAME不同,则会出现此问题的另一种可能性

快乐的编码


Hol*_*ola 5

我也遇到了同样的问题并在以后解决了.首先执行artisan命令:

php artisan cache:清楚

然后重启项目.希望它会有所帮助.


Bha*_*rav 5

您的表单方法是发布。因此,打开Middleware / VerifyCsrfToken .php文件,找到isReading()方法并在数组中添加“ POST”方法。


Yas*_*jaz 5

有很多可能性会导致这个问题.让我提一个.你有没有机会改变你的session.php配置文件?可能是您已将域的值从null更改为您的站点名称或session.php中的任何其他内容

'domain' => null,

此文件中的错误配置可能会导致此问题.


muk*_*ama 5

默认情况下,只有浏览器具有HTTPS连接时,会话 cookie 才会发送回服务器。您可以在 .env 文件中将其关闭(不鼓励用于生产)

SESSION_SECURE_COOKIE=false
Run Code Online (Sandbox Code Playgroud)

或者你可以在 config/session.php 中将其关闭

'secure' => false,
Run Code Online (Sandbox Code Playgroud)