Shopify 顾客账户

section 里 customer 对象为空导致登录态不显示

现象#

header 里写了 {% if customer %} 输出名字,顾客登录后刷新首页仍然显示 Login,退出登录看起来也一样。

原因#

  • 首页 HTML 被应用或 CDN 整页缓存,登录前后拿到的是同一份匿名版本
  • section 走 Section Rendering API 时 fetch 没带 credentials,服务端拿不到登录 cookie
  • 判断写在 JavaScript 里拼字符串,Liquid 在服务端早已执行完,条件永远不成立
  • 顾客从未完成首次登录,customer.has_account 仍然是 false

处理步骤#

  1. 在 theme.liquid 临时输出 {{ customer.id }},确认服务端是否识别到登录态
  2. 给 Section Rendering API 的请求加上 credentials: 'include'
  3. 检查缓存应用是否缓存了含 customer 判断的 HTML,把这类页面排除出缓存
  4. 把 JS 拼接改成 Liquid 输出,例如 data-customer 属性直接写顾客 ID
  5. 换一个完成过首次登录的测试顾客复测,区分「未激活」与「未登录」

验收标准#

测试顾客登录后首页 header 显示名字,退出后显示 Login,查看源码能看到对应的 customer ID。

本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。