Laravel项目配置域名访问报TokenMismatchException错误解决方案

如果你的项目是基于Laravel框架进行开发,那你一定使用过php artisan serve这个命令,在开发环境下我们会使用此命令来运行项目,并通过http://127.0.0.1:8000这个地址来运行。那每次都需要运行此命令比较麻烦,所以通常我们的做法是本地配置一个测试域名来访问。通过配置本机的nginx配置文件将此域名指向项目的public目录,最后修改本机的hosts。

当然,我的这个项目是一直运行好久了的,之前也配置过访问域名,访问一切正常,但是当Macbook pro更新系统后再本地访问项目时就出了如下的报错提示:

TokenMismatchException in VerifyCsrfToken.php line 68

以上错误的意思是说生成的csrf token和session中保存的csrf token不一至。出现以上问题我们最先想到的就是我们表单中是否添加csrf token,具体如何加查看Laravel帮助文档,但其实一般问题不在这里;

后来经过查找是/storage/framework/session目录的权限是755,也就是说只有root用户具体写的权限。那为什么php artisan serve命令运行就可以正常写入呢?原因是php-fpm的用户虽然是_www,但是php-fpm的master进程是属于root用户的,因此也就具有了写的权限。如下图所示:

那为什么我们正常的web访问就没有写的权限呢?如果你正在使用macbook那你的项目一定是放在你的家目录中,所以你的项目所属于当前登录用户,那当前用户一般都不会具有root权限。所以解决此问题的做法就是更改目录的权限,具体命令如下:

$ chmod -R 777 storage/framework/sessions

至此问题解决;但是如果你将storage/framework/views目录下生成的view文件删除的话,运行项目时虽然不会报错,但是页面显示为blank,那这又是为什么呢?同样还是权限问题!!!具体怎么解决不用再过多去描述了吧。以上就是本人自己趟过的坑,分享给大家,希望对大家有些帮助!!!

COMMENTS

@

双哥PHP-一个致力于分享世界上最好的语言的网站

2013-2017©SGPHP