[英]Shopify: get current logged in user ID in JavaScript
我正在嘗試為 shopify 構建一個應用程序,如果我可以使用 javascript api 或類似的東西獲取當前登錄的用戶 ID,我很感興趣。 我正在查看 ajax api: http : //docs.shopify.com/support/your-website/themes/can-i-use-ajax-api ,我可以看到您可以獲得當前用戶擁有的當前產品添加到他的購物車,但沒有關於用戶 ID。
有可能嗎,還是我錯過了什么?
您可以在 JavaScript 中嘗試使用__st.cid
來獲取客戶 ID。
我發現__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% 的時間來修復我的產品,因為它們。
在layout.liquid文件中,您可以添加此代碼來定義全局customerId變量
{% if customer %}
<script type="text/javascript">
window.customerId = "{{ customer.id }}";
</script>
{% endif %}
只需從ShopifyAnalytics.meta.page.customerId
獲取它是您的腳本
最好的辦法是創建一個應用程序,在商店中安裝一個簡單的 ScriptTag。 然后,該腳本可以安全地將客戶 ID 報告回應用程序。 做到這一點非常簡單。 忘記前端 API,因為沒有使用它來調用您的應用程序的安全方法。
似乎 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>
此解決方案不是 100% 獲取user_id
,而是檢測當前用戶是否以管理員身份登錄。 您可以使用typeof Shopify.AdminBar
來檢查管理欄是否存在。 如果當前用戶是管理員,它會由 Shopify 自動創建。 也許這會幫助某人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.