Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shopify:在JavaScript中获取当前登录的用户ID_Javascript_Ajax_Shopify - Fatal编程技术网

Shopify:在JavaScript中获取当前登录的用户ID

Shopify:在JavaScript中获取当前登录的用户ID,javascript,ajax,shopify,Javascript,Ajax,Shopify,我正在尝试为shopify构建一个应用程序,我很感兴趣是否可以使用javascript api或类似的东西获取当前登录的用户ID。 我在看AJAXAPI:我可以看到您可以获得当前用户添加到其购物车中的当前产品,但与用户ID无关 有可能吗,或者我遗漏了什么吗?您最好的选择是创建一个应用程序,在商店中安装一个简单的ScriptTag。然后,该脚本可以安全地将客户ID报告回应用程序。这很简单。忘记前端API吧,因为使用它调用应用程序没有安全的方法 您可以尝试使用JavaScript中的\uu st.c

我正在尝试为shopify构建一个应用程序,我很感兴趣是否可以使用javascript api或类似的东西获取当前登录的用户ID。 我在看AJAXAPI:我可以看到您可以获得当前用户添加到其购物车中的当前产品,但与用户ID无关


有可能吗,或者我遗漏了什么吗?

您最好的选择是创建一个应用程序,在商店中安装一个简单的ScriptTag。然后,该脚本可以安全地将客户ID报告回应用程序。这很简单。忘记前端API吧,因为使用它调用应用程序没有安全的方法

您可以尝试使用JavaScript中的
\uu st.cid
获取客户id。

我发现
\uu st
变量不可靠(
\uu st\u uniqToken
)。 我认为在Javascript中实现这一点的正确方法是使用以下调用:

ShopifyAnalytics.lib.user().id()

您还可以通过以下方式获得唯一的用户id(非登录id):

ShopifyAnalytics.lib.user().properties().uniqToken

这也是在结帐页面上获取它的唯一可靠方法。我以前使用过
\uu st\u 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%的时间来解压我的产品,因为它们都是假的。

在layout.liquid文件中,您可以添加此代码来定义全局customerId变量

{% if customer %}
  <script type="text/javascript">
   window.customerId = "{{ customer.id }}";   
  </script>
{% endif %}
{%if customer%}
window.customerId=“{{customer.id}}”;
{%endif%}

只需从
ShopifyAnalytics.meta.page.customerId
获取它,这是您的脚本似乎Shopify API再次更改,我看到现在用户Id位于
ShopifyAnalytics.lib.user().traits().uniqToken
。此外,加载此值可能需要时间

一旦值可用,我将使用此代码段执行作业

<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>

actOnUser=函数(重试,func){
if(ShopifyAnalytics&&ShopifyAnalytics.lib&&ShopifyAnalytics.lib.user){
console.log(ShopifyAnalytics.lib.user().traits().uniqToken);//在这里完成您的工作。
}否则{
如果(重试>0){
setTimeout(函数(){
func(重试-1,func);
}, 1000);
}
console.log('User not ready');//可以删除-仅用于调试
}
}
console.log('Starting');
setTimeout(函数(){
actOnUser(10,actOnUser);
}, 1000);

此解决方案不是100%获取
用户id
,而是检测当前用户是否以管理员身份登录。您可以使用Shopify.AdminBar的
类型来检查管理栏是否存在。如果当前用户是管理员,它将由Shopify自动创建。也许这会对某人有所帮助。

听起来很有趣。但是如何使用脚本获取客户ID呢?这就是我想要的液体。var id={{customer.id}};//使用idScript标记立即回调我的安全应用程序代理无法使用Liquid。我无法在Shopify文档中找到参考资料,尽管他们不能这样做是有道理的。关于这一点的一些有用信息应该是公认的答案,因为它实际上回答了“获取当前登录用户ID”的问题。
shopifAnalytics.lib.user()
对象自此答案后似乎已更改。我现在只看到了
traits
函数,带有uniqToken属性,即
ShopifyAnalytics.lib.user.traits().uniqToken
@AndyTriggs现在是
ShopifyAnalytics.lib.user().traits().uniqToken
,这对我很有用。如果用户未登录,则它是未定义的。只有在.liquid文件中使用它时,它才会起作用。它在.js文件中不起作用。这是如何在.liquid文件中声明全局变量的方法,可以从任何js文件访问该变量。此解决方案可能适用于私人应用程序,但期望商家编辑liquid模板以允许访问前端公共应用程序的客户ID充其量只是一种黑客行为。Tim,没有什么对你不利的,只是对这个答案感到失望,因为Shopify的员工也推荐这种方法,这种方法完全不利于商店,也不利于良好体验。当然,我对它的这种变体不太满意,但正如你所说,其他变体,甚至是官方的,如果真的很难找到更好的。因此,声明更可靠的东西更好。但是,是的,我是在我自己的主题中为我自己的功能做的。或者更具体地说,var customer\u id=meta.page.customerId
ShopifyAnalytics.meta.page
对象不再包含
customerId