VerifyCsrfToken.php中的TokenMismatchException第67行

我知道这是一个已知的错误,像Laravel中的forms。 但是我在Laravel 5.2中遇到了基本身份validation问题。

我使用Laravel创build了auth。

php artisan make:auth 

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

我的本地和服务器环境都是同步的,但我一直在注册时发生错误。 任何帮助我如何解决这个问题?

错误的屏幕截图

我假设你添加了$this->middleware('auth'); 在你的控制器的构造函数里面来validation工作。 如果您正在使用{!! Form::someElement !!} ,请在您的login/registry单中添加以下内容{!! Form::someElement !!} {!! Form::someElement !!}

 {!! csrf_field() !!} 

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

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

干杯。

我有一个类似的问题,这是一个简单的修复。

在您的HTML元标记区域添加这个:

  <meta name="csrf-token" content="{{ csrf_token() }}"> 

然后在你的JQuery引用下,添加下面的代码:

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

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

 {{ csrf_field() }} 

在你的表格标签内。

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

 <meta name="csrf-token" content="{{ csrf_token() }}" /> 

在你的表单中,你需要添加这个隐藏的input字段:

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

那就是它,为我工作。

如果没有任何工作,你可以去App / Http / Middleware / VerifyCsrfToken.php文件,并添加您的路由到受保护的$ excpt删除CSRF安全检查。

例如,如果我想删除所有路由的CSRF保护。

 protected $except = [ '/*' ]; 

PS虽然是一个包含CSRF保护的良好实践。

我正要开始拔出我的头发!

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

 'domain' => env('COOKIE_DOMAIN', 'some-sensible-default.com'), 

我也面临同样的问题,并在以后解决。 首先执行工匠指令:

PHP的工匠caching:清除

之后重新启动项目。 希望它会有所帮助。

有很多可能会导致这个问题。 让我提一个。 你有没有机会改变你的session.phpconfiguration文件? 可能是你已经从空值更改为您的网站名称或session.php其他任何东西的价值

'domain' => null,

在这个文件中错误的configuration会导致这个问题。

我正在使用在laravel 5.4上运行的应用程序面临同样的问题

 php artisan session:table php artisan make:auth php artisan migrate 

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

 chmod 777 storage/framework/sessions/ 

如果您将SESSION_DOMAIN(in .env)设置为与HOST_NAME不同,则还有另外一种可能性

快乐的编码

你的表单方法是后。 因此,打开Middleware / VerifyCsrfToken .php文件,findisReading()方法并在数组中添加“POST”方法。

我也得到这个错误,但是我解决了这个问题。 如果您使用php artisan serve{!! Form::open() !!} {{ csrf_field() }}下添加此代码{{ csrf_field() }} {!! Form::open() !!} {!! Form::open() !!}

  1. PHP的工匠caching:清除
  2. 清除caching和Cookie浏览器
  3. 使用私人浏览器(Mozilla)/隐身窗口(Chrome)
  4. 打开你的表格/页面,然后再提交家伙

我希望这是解决你的问题。

转到app/provides

然后,在RouteServiceProvider.php文件中,必须在protected function mapWebRoutes(Router $router)删除'middleware' => 'web'

确保

 {!! csrf_field() !!} 

在刀片语法中添加到您的表单中。

或者以简单的forms语法

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

与此一起,确保在session.php(在configuration文件夹中),以下设置正确。

 'domain' => env('SESSION_DOMAIN', 'sample-project.com'), 

或更新.env文件中的相同,

 SESSION_DOMAIN=sample-project.com 

就我而言{!! csrf_field()!!}被正确添加,但是SESSION_DOMAINconfiguration不正确。 在我的.env文件中用正确的值改变它之后,它就起作用了。

在session.php中更改会话驱动程序到我的文件被设置为数组。

如果'www-data'用户对该文件夹没有访问/写入权限,也可能发生:'laravel-project-folder'/ storage / framework / sessions /

下面为我​​工作。

 <input type = "hidden" name = "_token" value = "<?php echo csrf_token(); ?>"> 

你有没有检查你的隐藏input字段的生成令牌?

如果它为null,那么你的令牌不会被csrf_token函数返回。你必须编写你的路由来呈现laravel提供的中间件组中的表单,如下所示:

  Route::group(['middleware' => 'web'], function () { Route::get('/', function () { return view('welcome'); }); 

这里根路由包含我的注册页面,需要csrf令牌。 这个标记由kernel.php中'web'中间件内的laravel 5.2.7pipe理。

不要忘记插入{! csrf_field()!!}里面的forms..

我有同样的问题,但我解决了纠正我的表单打开如下所示:

 {!!Form::open(['url'=>route('auth.login-post'),'class'=>'form-horizontal'])!!} 

如果这不能解决你的问题,你能告诉我你是如何打开表格的吗?

你应该试试这个。

{{csrf_field()}}添加到表单打开标记之后,就像这样。

 <form method="POST" action="/your/{{ $action_id }}"> {{ csrf_field() }} 

你是否将这个post重新定向? 我有这个问题,我能够通过返回相同的视图,而不是使用Redirect :: back()来解决它。

使用这个返回视图() – > with(),而不是Redirect :: back()。

对我而言,我必须使用安全的https而不是http。

尝试更改config/session.php的会话生存期,如下所示:

'lifetime' => 120, 'lifetime' => 360,

在这里,我设置了一生到360,希望这个帮助。

默认情况下,如果浏览器具有HTTPS连接,会话cookie将只发送回服务器。 您可以在.env文件中closures它(不鼓励生产)

 SESSION_SECURE_COOKIE=false 

或者你可以在config / session.php中closures它

 'secure' => false, 

上传大文件(video)时出现此错误。 表单工作正常,没有不匹配的错误,但只要有人附加一个大的video文件,它会抛出这个令牌错误。 调整最大允许的文件大小和增加处理时间为我解决了这个问题。 不知道为什么Laravel在这种情况下抛出这个错误,但这里有一个更多的潜在的解决scheme。

这里有一个StackOverflow的答案,更详细地介绍如何解决大file upload问题。

PHP更改最大上传文件大小

在我的情况下,当重启服务器后尝试login时,我遇到了一个问题,但是我在表单中有csrf字段,并且没有刷新页面,或者在caching中存在错误。

这是我的解决scheme。 我把这段代码放在\ App \ Http \ Middleware \ VerifyCsrfToken.php中

 public function handle($request, Closure $next) { try { return parent::handle($request, $next); // TODO: Change the autogenerated stub } catch(TokenMismatchException $e) { return redirect()->back(); } } 

它所做的就是捕获TokenMismatchException,然后将用户redirect回页面(以重新加载标题和字段中的csrf标记)。 它可能无法正常工作,但它为我的问题。

尝试PHP手工caching:清除或手动删除服务器的存储caching。

如果你检查Laravel 5.4的一些默认表单,你可以填写如何完成:

 <form class="form-horizontal" role="form" method="POST" action="{{ route('password.email') }}"> {{ csrf_field() }} <div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}"> <label for="email" class="col-md-4 control-label">E-Mail Address</label> <div class="col-md-6"> <input id="email" type="email" class="form-control" name="email" value="{{ old('email') }}" required> @if ($errors->has('email')) <span class="help-block"> <strong>{{ $errors->first('email') }}</strong> </span> @endif </div> </div> <div class="form-group"> <div class="col-md-6 col-md-offset-4"> <button type="submit" class="btn btn-primary"> Send Password Reset Link </button> </div> </div> </form> 

 {{ csrf_field() }} 

是添加Laravel将理解的自定义隐藏字段的最合适的方式。

你可以看到csrf_token()在里面使用了csrf_token()

 if (! function_exists('csrf_field')) { /** * Generate a CSRF token form field. * * @return \Illuminate\Support\HtmlString */ function csrf_field() { return new HtmlString('<input type="hidden" name="_token" value="'.csrf_token().'">'); } } 

csrf_field()方法使用作业的会话。

 function csrf_token() { $session = app('session'); if (isset($session)) { return $session->token(); } throw new RuntimeException('Application session store not set.'); } 

当我初次尝试Laravel 5.2时遇到了同样的问题,于是我了解了{{!! csrf_field() !!}} {{!! csrf_field() !!}}被添加到表单中,并解决它。 但后来我了解了表单助手,这照顾了CSRF保护,并没有给出任何错误。 虽然Form Helpers在Laravel 5.2之后并不合法,但您仍然可以在LaravelCollective中使用它们。

你可以通过删除行来解决。 去app \ http \ kernel.php,在这里你可以看到这行\ App \ Http \ Middleware \ VerifyCsrfToken :: class,这对我有效。

在打开标记之后放置此代码:

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

我的问题是php.ini中的post_max_size值较小。