如何解决Inertia.js在虚拟主机下的CSRF-TOKEN不匹配问题?
解决Inertia.js在虚拟主机环境下的CSRF-TOKEN不匹配419错误
可能的原因及解决方案
1. 修正Laravel的域名相关配置
- 打开项目根目录下的
.env文件,确保以下配置正确:
(APP_URL=http://app.local SESSION_DOMAIN=.app.localSESSION_DOMAIN前的点用于适配该域名下的所有子域名,若无需求也可直接设为app.local) - 执行命令清除配置缓存:
php artisan config:clear
2. 确保CSRF令牌正确传递
- 检查Laravel根模板(通常是
resources/views/app.blade.php)中是否包含正确的CSRF meta标签:<meta name="csrf-token" content="{{ csrf_token() }}"> - 若令牌仍无法自动获取,可在Inertia初始化时手动注入:
在resources/js/app.js中添加令牌全局属性:import { createApp, h } from 'vue' import { createInertiaApp } from '@inertiajs/vue3' createInertiaApp({ resolve: name => import(`./Pages/${name}`), setup({ el, App, props, plugin }) { return createApp({ render: () => h(App, props) }) .use(plugin) .mixin({ methods: { route } }) .config.globalProperties.$csrfToken = document.querySelector('meta[name="csrf-token"]').content .mount(el) }, })
3. 清除浏览器缓存与Cookie
- 由于之前使用
php artisan serve时生成的Cookie与虚拟主机域名冲突,需手动清除浏览器中app.local域名的Cookie,或使用无痕模式测试。
4. 检查虚拟主机配置
- 确认虚拟主机的根目录指向Laravel项目的
public文件夹,避免路径错误导致资源加载或Cookie传递异常; - 检查本地
hosts文件是否添加了域名解析:127.0.0.1 app.local
内容的提问来源于stack exchange,提问作者Himel shipu
相关产品推荐
相关产品推荐

