在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中间件作为修复,但这不是一个可行的解决方案。任何帮助表示赞赏。
答案 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)