PHP 5.6.9 上的 Laravel 5 TokenMismatchException
Posted
技术标签:
【中文标题】PHP 5.6.9 上的 Laravel 5 TokenMismatchException【英文标题】:Laravel 5 TokenMismatchException on PHP 5.6.9 【发布时间】:2015-08-10 00:46:35 【问题描述】:在 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 中间件作为修复,但这不是一个可行的解决方案。任何帮助表示赞赏。
【问题讨论】:
我很想调试app/Http/Middleware/VerifyCsrfToken.php
并在 return parent::handle($request, $next);
之前执行以下操作:dd([ Input::all() , Session::all() ])
- 测试会话中的 _token
与输入中的 _token
匹配。跨度>
我更改了.env
中的cookie/会话缓存引擎。 CACHE_DRIVER=file SESSION_DRIVER=file
【参考方案1】:
输入<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;
)();
【讨论】:
这可能与 jquery 是单行的 可以,比如$.ajaxSetup( headers: 'X-CSRF-TOKEN': $('meta[name="csrf_token"]').attr('content') );
【参考方案2】:
当我意识到这只发生在 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;
【讨论】:
可能只花了几个小时 4 5 :/ :3 它为我节省了很多时间 这是唯一适用于网络上荒谬的“添加 csrf_field”答案的解决方案。非常感谢您的工作解决方案。 终于找到了一个可行的答案!谢谢!我不知道为什么会这样,但它不仅在 Chrome 上有效,在 Firefox 上也有效。【参考方案3】:只需将 csrf_field()
添加到您的表单块中,它将为您节省大量时间
<form action=" route('signup') " method="post" class="form-signin">
csrf_field()
...
</form>
【讨论】:
【参考方案4】:对于尽管在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
我希望这会有所帮助。
【讨论】:
【参考方案5】:我遇到了同样的问题,我可以通过在顶部添加以下包来解决它: "Spatie\Permission\PermissionServiceProvider::class,"
【讨论】:
以上是关于PHP 5.6.9 上的 Laravel 5 TokenMismatchException的主要内容,如果未能解决你的问题,请参考以下文章
从 Laravel 5.2 更新到 5.3 后,调用数组上的成员函数 all()
markdown PHP 5.6性能基准与Laravel 5.4上的PHP 7相比