Laravel 5.3 - SESSION_DOMAIN 导致的 TokenMismatchException
Bug描述
众所周知,laravel的post请求是有csrf保护。
但是我在laravel5.3之后的版本就算加上{{ csrf_token() }}都会出现TokenMismatchException。
而在服务器的测试是完全没问题,这让我百思不得其解。
一切的bug解决方法一定在存在于stackoverflow的某个角落。
Bug原因的思考
我在laravel5.3的项目里的evn里面的session_domain写了localhost:8000。
我用php artisan serve启动的服务是127.0.0.1:8000 。
但是我的服务端的session存在localhost:8000。
所以每次post请求的127.0.0.1服务端都没有session。自然而然不能匹配。
而在服务器上面是用ip地址,所以不翻车。
所以,在本地,只要把session_domain删掉,用默认的设置null,即可解决问题。
localhost和127.0.0.1不是一样的吗?
用起来好像差不多,但是实际上是有本质的区别,有兴趣的自己百度一下。
最后,附上解决这个问题的stackoverflow地址
导致TokenMismatchException还有很多种情况。
有人是因为storage权限不够,有人是因为app_key……
Laravel 5.3 - TokenMismatchException in VerifyCsrfToken.php line 68
推荐文章: