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发送获取请求

Shopify 自定义支付网关实施

在我的 Shopify Liquid 主题中添加并解析我自己的 JSON 对象

如何从 Shopify SDK 中获取收藏?

javascript 使用Vanilla JavaScript Shopify GraphQL Storefront API

javascript 使用Vanilla JavaScript Shopify GraphQL Storefront API