You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 16:35:50