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

升级shopify_app 20.1.0后,Turbolinks请求如何携带session与shop参数?

Shopify App 升级至20.1.0版本后Turbolinks加载失效的解决方法

问题背景

我的Shopify应用原本基于shopify_app 19版本开发,使用Turbolinks加载嵌入式应用,核心代码如下:
Turbolinks.visit(data.loadPath);
此前仅需在请求头中添加会话令牌即可完成验证:
xhr.setRequestHeader("Authorization", "Bearer " + AppBridge.sessionToken);

升级至shopify_app 20.1.0版本后,上述功能完全失效。查看登录保护逻辑可知,新版本要求每个请求必须携带session和shop参数(判断逻辑为params[:session].present?),以下是适配Turbolinks的解决方法:


解决步骤

1. 给Turbolinks访问的URL拼接参数

调用Turbolinks.visit时,直接将shop和session参数附加到目标URL上:

// 获取shop值(可从AppBridge上下文或当前URL参数提取)
const shop = AppBridge.context.shop;
// 获取session令牌
const sessionToken = AppBridge.sessionToken;

// 构造带参数的URL
const targetUrl = new URL(data.loadPath);
targetUrl.searchParams.set('shop', shop);
targetUrl.searchParams.set('session', sessionToken);

// 调用Turbolinks访问
Turbolinks.visit(targetUrl.toString());

2. 保留请求头的Authorization设置(可选)

虽然新版本以URL参数验证为主,但保留请求头的令牌设置可确保兼容性,继续监听Turbolinks请求事件:

document.addEventListener('turbolinks:before-request', (event) => {
  const xhr = event.data.xhr;
  xhr.setRequestHeader("Authorization", "Bearer " + AppBridge.sessionToken);
});

3. 验证参数传递有效性

在后端控制器中打印params,确认shop和session参数已正确传递,确保满足params[:session].present?的验证条件。


内容的提问来源于stack exchange,提问作者aarkerio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:45:42