在Shopify应用中发起请求时为何出现Session Token无效错误?
解决Shopify应用中Vue+Inertia向Laravel后端发POST请求的419错误
从错误提示来看,这是Laravel的419 Page Expired错误,本质是CSRF令牌验证失败,下面是具体解决办法:
配置CSRF令牌自动携带
Laravel默认会校验POST请求的CSRF令牌,Inertia需要正确带上这个令牌才能通过验证。
先在Laravel根模板(比如app.blade.php)里添加meta标签:<meta name="csrf-token" content="{{ csrf_token() }}">然后在Inertia的初始化文件(比如
app.js)里配置全局请求头,让所有Inertia请求自动带上令牌:import { Inertia } from '@inertiajs/inertia'; Inertia.defaults.headers.common['X-CSRF-TOKEN'] = document.querySelector('meta[name="csrf-token"]').content;适配Shopify嵌入应用的跨域场景
因为Shopify应用是嵌入在iframe里的跨域环境,得调整Laravel的session配置来适配:
修改config/session.php里的same_site和secure参数:'same_site' => 'lax', 'secure' => env('SESSION_SECURE_COOKIE', true),如果是Shopify的webhook路由,可以在
VerifyCsrfToken中间件里跳过CSRF验证,但前端页面发起的请求不建议这么做,优先用带令牌的方式:// app/Http/Middleware/VerifyCsrfToken.php protected $except = [ '/api/shopify/webhooks/*', // 替换成你的实际webhook路由 ];用Inertia原生方法发起请求
别用原生的fetch或axios发请求,直接用Inertia的post方法,它会自动处理令牌和会话信息:import { Inertia } from '@inertiajs/inertia'; // 示例:发起POST请求 Inertia.post('/your-laravel-api-route', { // 这里放请求参数 });
内容的提问来源于stack exchange,提问作者Dávid Michalco
相关产品推荐
相关产品推荐

