升级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
相关产品推荐
相关产品推荐

