Laravel 5 PHP 5.6.9 上的 TokenMismatchException

Laravel 5 TokenMismatchException on PHP 5.6.9

Post 请求在 PHP 5.4 上工作正常 运行 Laravel 5 应用程序。 Post 相同应用程序 运行 PHP 5.6.9 上的请求生成:

TokenMismatchException VerifyCsrfToken.php on line 46

WAMP 和 IIS 上的每个 post 请求都会发生这种情况。使用数据库会话和文件会话时发生。完全重新安装并尝试了此处提出的所有建议:https://laracasts.com/discuss/channels/general-discussion/keep-getting-tokenmismatchexception-verifycsrftokenphp-on-line-46?page=2。人们正在禁用 Csrf 中间件作为修复,但这不是一个可行的解决方案。任何帮助表示赞赏。

输入 <meta name="csrf_token" content="{{ csrf_token() }}"> 以便令牌始终可用,并将其与您的 AJAX 请求一起使用: 例如:

var csrftoken =  (function() {
var metas = window.document.getElementsByTagName('meta');
for(var i=0 ; i < metas.length ; i++) {
    if ( metas[i].name === "csrf-token") {
        return  metas[i].content;
    }
}})();

当我意识到这只发生在 IE 和 Chrome 中,而不是 Firefox 时,它引导我进行修复。该应用程序正在使用 AddThis 共享按钮,并且 javascript 正在向页面添加 iframe。通过向 VerifyCsrfToken 中间件添加 P3P header 解决了此问题。希望这可以节省我失去的时间。

public function handle($request, Closure $next)
    {
        $response = $next($request);

        if (last(explode('\',get_class($response))) != 'RedirectResponse') {
            $response->header('P3P', 'CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');
        }

        return $response;
    }

只需将 {{ csrf_field() }} 添加到您的表单块,它会为您节省很多时间

<form action="{{ route('signup') }}" method="post" class="form-signin">
{{ csrf_field() }}
...
</form>

对于尽管在 form 字段中添加 {{ csrf_field() }} 甚至在 head 标记中添加它仍面临此问题的任何人 <meta name="csrf-token" content="{{ csrf_token() }}">

问题在于写入存储,因为没有将您当前的用户添加到 Linux 的正确组中。确保将您当前的用户添加到 www-data 组。 写这个命令

sudo chown -R :www-data /path/to/laravel-folder

确保在 laravel 应用程序中也为存储文件夹授予正确的权限。

sudo chmod -R 775 /path/to/laravel-folder/storage

希望对您有所帮助。

我遇到了同样的问题,我可以通过在顶部添加以下包来解决它: "Spatie\Permission\PermissionServiceProvider::class,"