【发布时间】:2016-08-23 02:38:22
【问题描述】:
我有一个 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 url,它就可以正常工作。
任何想法如何解决这个问题?
编辑:
我尝试检查多个 ajax 请求,似乎每个请求都有一个带有不同令牌的完全不同的会话:
$request->session()->token();
【问题讨论】:
标签: php jquery ajax laravel laravel-5.1