我有一个Laravel 5.1应用程序,启动时加载了Ajax内容 .
我已将CSRF元标记放到页面头部:
<meta name="csrf-token" content="{{ csrf_token() }}" />
我在jquery ajax请求中使用它:
$.ajaxSetup(
{
headers:
{
"X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content")
}
});
在正常情况下,一切都很完美 . 但是当我在没有前一个会话的情况下打开404错误页面时,我的ajax请求会收到错误:VerifyCsrfToken.php中的TokenMismatchException
我在文件中有一个404错误处理程序:app \ Exceptions \ 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);
}
我可以通过打开一个私人浏览器窗口并使用url打开我的网站到非现有页面来重复此错误 . 它会在页面重新加载时持续存在 . 但是,如果我转到现有页面并再次尝试404网址,它可以正常工作 .
任何想法如何解决这个问题?
编辑:
我尝试检查多个ajax请求,似乎每个请求都有一个完全不同的会话和不同的令牌:
$request->session()->token();
1 回答
在您的CSRF中间件中,在返回parent :: handle($ request,$ next)之前添加它:
编辑:csrf_token()是否在该404页面上返回任何内容?我发现有趣的here . 看起来与您的问题类似