section 里 customer 对象为空导致登录态不显示
现象#
header 里写了 {% if customer %} 输出名字,顾客登录后刷新首页仍然显示 Login,退出登录看起来也一样。
原因#
- 首页 HTML 被应用或 CDN 整页缓存,登录前后拿到的是同一份匿名版本
- section 走 Section Rendering API 时 fetch 没带 credentials,服务端拿不到登录 cookie
- 判断写在 JavaScript 里拼字符串,Liquid 在服务端早已执行完,条件永远不成立
- 顾客从未完成首次登录,
customer.has_account仍然是 false
处理步骤#
- 在
theme.liquid临时输出{{ customer.id }},确认服务端是否识别到登录态 - 给 Section Rendering API 的请求加上
credentials: 'include' - 检查缓存应用是否缓存了含 customer 判断的 HTML,把这类页面排除出缓存
- 把 JS 拼接改成 Liquid 输出,例如
data-customer属性直接写顾客 ID - 换一个完成过首次登录的测试顾客复测,区分「未激活」与「未登录」
验收标准#
测试顾客登录后首页 header 显示名字,退出后显示 Login,查看源码能看到对应的 customer ID。
本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。