1
我有一个Laravel 5.1应用程序,启动时加载了Ajax内容。CSRF令牌不在Laravel 5.1异常处理程序发出Ajax请求
我已经放在CSRF meta标签页头:
<meta name="csrf-token" content="{{ csrf_token() }}" />
我用它在jQuery的Ajax请求:
一切工作完全正常的情况下。但是,当我打开一个404错误页面之前没有会话,我的Ajax请求得到一个错误: TokenMismatchException在VerifyCsrfToken.php
我在文件中的404错误处理程序:程序\例外\ Handler.php
public function render($request, Exception $e)
{
if ($e instanceof NotFoundHttpException)
{
$foo = \App\Foo::foo();
return \Response::make(view("errors.404", compact("foo")), 404);
}
return parent::render($request, $e);
}
我可以重复这个错误,打开一个私人浏览器窗口,并打开我的网站与网址到一个不存在的页面。它持续在页面重新加载。但是,如果我去现有的网页,并再次尝试404网址,它工作正常。
任何想法如何解决这个问题?
编辑:
我试图检查多个Ajax请求,它好像每个请求有不同的令牌的complitely不同的会话:
$request->session()->token();
没有运气。 Middleware \ VerifyCsrfToken.php函数tokensMatch已经获得令牌: $ token = $ request-> input('_ token')?:$ request-> header('X-CSRF-TOKEN'); – Corrodian
是的,csrf_token()返回一个值。我可以将用户重定向到一个单独的404网址,从而避免出现问题。然后,用户将失去原来的网址。似乎很奇怪,我必须这样做。 – Corrodian