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