Shopify:在 JavaScript 中获取当前登录的用户 ID
Posted
技术标签:
【中文标题】Shopify:在 JavaScript 中获取当前登录的用户 ID【英文标题】:Shopify: get current logged in user ID in JavaScript 【发布时间】:2014-10-19 12:25:02 【问题描述】:我正在尝试为 shopify 构建一个应用程序,如果我可以使用 javascript api 或类似的东西获取当前登录的用户 ID,我很感兴趣。 我正在查看 ajax api:http://docs.shopify.com/support/your-website/themes/can-i-use-ajax-api,我可以看到您可以获得当前用户添加到他的购物车中的当前产品,但没有关于用户 ID。
有可能吗,还是我错过了什么?
【问题讨论】:
【参考方案1】:我发现__st
变量不可靠(其中一个是__st_uniqToken
)。
我相信在 Javascript 中执行此操作的正确方法是使用以下调用:
ShopifyAnalytics.lib.user().id()
您还可以通过以下方式获取唯一用户 ID(未登录 ID):
ShopifyAnalytics.lib.user().properties().uniqToken
这也是在结帐页面上获取它的唯一可靠方法。我之前用过__st_uniqToken
,但它已经停止工作了。
注意 这不再是 100% 万无一失的。 Shopify 再次改变了他们的网站在登陆页面和致谢页面上的工作方式。 我不得不求助于以下函数来“可靠地”获取用户 ID。
var user_id = function()
try
return ShopifyAnalytics.lib.user().id();
catch(e)
try
return ShopifyAnalytics.lib.user().properties().uniqToken;
catch(e)
try
return ShopifyAnalytics.lib.user().anonymousId();
catch(e)
return __st_uniqToken;
;
为 Shopify 开发是一场真正的噩梦。因为他们,我每隔几周花费 50% 的时间来修复我的产品。
【讨论】:
这应该是公认的答案,因为它实际上回答了“获取当前登录用户 ID”的问题。 自此答案以来,ShopifyAnalytics.lib.user()
对象似乎发生了变化。我现在只看到 traits
函数,具有属性 uniqToken,即 ShopifyAnalytics.lib.user.traits().uniqToken
@AndyTriggs 现在是ShopifyAnalytics.lib.user().traits().uniqToken
【参考方案2】:
您可以尝试在 JavaScript 中使用 __st.cid
来获取客户 ID。
【讨论】:
这对我有用。如果用户未登录,则未定义。【参考方案3】:在 layout.liquid 文件中,您可以添加此代码来定义全局 customerId 变量
% if customer %
<script type="text/javascript">
window.customerId = " customer.id ";
</script>
% endif %
【讨论】:
只有在 .liquid 文件中使用它才会起作用。它不适用于 .js 文件。 这是在 .liquid 文件中声明 GLOBAL 变量的方法,该文件可从任何 js 文件访问。 这个解决方案对于私有应用程序来说可能没问题,但期望商家编辑流动模板以允许在前端访问公共应用程序的客户 ID 充其量是 hacky。蒂姆,没有什么对你不利,只是对这个答案感到沮丧,因为 Shopify 工作人员也推荐这种完全反商店友好和反良好体验的方法。 当然,我对它的这个变体并不满意,但正如你所说的其他变体,甚至官方如果真的很难确定更好。因此,声明更可靠的东西会更好。但是,是的,我在自己的主题中为自己的功能做了它。【参考方案4】:从ShopifyAnalytics.meta.page.customerId
得到它是你的脚本
【讨论】:
或者更具体地说 var customer_id = meta.page.customerId;ShopifyAnalytics.meta.page
对象不再包含customerId
【参考方案5】:
您最好的选择是创建一个在商店中安装简单 ScriptTag 的应用程序。然后,该脚本可以将客户 ID 安全地报告回应用程序。这样做很简单。忘记前端 API,因为没有安全的方式来使用它来调用您的应用程序。
【讨论】:
听起来很有趣。但是如何使用脚本获取客户 ID?这就是我要找的 使用液体。 var id = customer.id; // 现在用 id 回调我的安全应用代理 脚本标签不能使用 Liquid。我不能在 Shopify 文档中引用,尽管他们不能这样做是有道理的。关于nozzlegear.com/blog/the-developers-guide-to-shopify-script-tags的一些有用信息【参考方案6】:Shopify API 好像又变了,我看到现在用户 ID 在ShopifyAnalytics.lib.user().traits().uniqToken
。此外,加载此值可能需要一些时间。
一旦值可用,我使用此代码 sn-p 执行工作。
<script type="text/javascript">
actOnUser = function(retry, func)
if (ShopifyAnalytics && ShopifyAnalytics.lib && ShopifyAnalytics.lib.user)
console.log(ShopifyAnalytics.lib.user().traits().uniqToken); // Do your work here.
else
if (retry > 0)
setTimeout(function()
func(retry - 1, func);
, 1000);
console.log('User not ready'); // Can be removed - just for debug
console.log('Starting');
setTimeout(function()
actOnUser(10, actOnUser);
, 1000);
</script>
【讨论】:
【参考方案7】:这个解决方案不是 100% 获取user_id
,而是检测当前用户是否以管理员身份登录。您可以使用typeof Shopify.AdminBar
检查管理栏是否存在。如果当前用户是管理员,它将由 Shopify 自动创建。也许这会对某人有所帮助。
【讨论】:
以上是关于Shopify:在 JavaScript 中获取当前登录的用户 ID的主要内容,如果未能解决你的问题,请参考以下文章
在我的 Shopify Liquid 主题中添加并解析我自己的 JSON 对象
javascript 使用Vanilla JavaScript Shopify GraphQL Storefront API
javascript 使用Vanilla JavaScript Shopify GraphQL Storefront API