PHP 5.6.9上的Laravel 5 TokenMismatchException

时间:2015-05-27 18:52:07

标签: php laravel-5 csrf

在PHP 5.4上发布请求可以正常运行Laravel 5应用程序。在PHP 5.6.9 上运行的相同应用上发布请求生成:

  

第46行的TokenMismatchException VerifyCsrfToken.php

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

5 个答案:

答案 0 :(得分:19)

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

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;
    }

答案 1 :(得分:0)

put <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;
    }
}})();

答案 2 :(得分:0)

只需将{{ csrf_field() }}添加到您的表单块即可节省大量时间

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

答案 3 :(得分:0)

对于任何人,即使在{{ csrf_field() }}字段中添加form,甚至在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

我希望这会有所帮助。

答案 4 :(得分:-1)

我也遇到过同样的问题,只需在顶部添加以下软件包即可解决此问题: “ Spatie \ Permission \ PermissionServiceProvider :: class”

enter image description here