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,"
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,"