【问题标题】:How to get the myshopify_domain from a ShopifyApp::Authenticated controller without an API call如何在没有 API 调用的情况下从 ShopifyApp::Authenticated 控制器获取 myshopify_domain
【发布时间】:2019-05-26 18:26:13
【问题描述】:
我试图减少从继承自 ShopifyApp::AuthenticatedController 的控制器对 Shopify API 的不必要调用,例如获取 myshopify_domain:
myshopify_domain = ShopifyAPI::Shop.current.myshopify_domain
ShopifyApp::SessionRepository 或 ShopifyApp 中的其他地方是否有一些方法可以调用以检索 Shop.current.myshopify_domain 而无需实际调用 Shopify API 网络服务?如果没有,我能否将检索到的 myshopify_domain 存储在 ShopifyApp::SessionRepository 中?
【问题讨论】:
标签:
ruby-on-rails
ruby
shopify
shopify-app
【解决方案1】:
如果您在 AuthenticatedController 中,请将以下内容转储到控制台:
session.to_json
您将看到您可以访问有关当前会话的各种内容,例如:
session["shopify_domain"]
session["shop_id"]
我在使用多商店应用时遇到了同样的问题,我需要提取与特定商店相关的数据。 ShopifyAPI::Shop.current.myshopify_domain 是多余的,因为您正在减慢等待 Shopify 响应的控制器的速度,并且您正在调整 api 存储桶限制。 session 对象是避免所有这些的高级方法,并且应该可以从任何继承 ShopifyApp::Authenticated 控制器的控制器访问。
【解决方案2】:
您的问题令人困惑。在您调用 API 时,您显然已经知道 myshopify_domain,因为您无法使用商店名称和令牌进行 API 调用。
所以现在我们已经过了这一点,您在问如何以某种方式让 myshopify_domain 更方便您使用?只需让自己成为一个小帮手,这样当您打开会话时,您就可以访问 shop_name 或任何您想要的。
Shopify 总是在他们的请求中向您发送商店名称,因此您可以将其覆盖,因为它是一个参数,您自己的界面代码和调用也将设置商店名称,因此您现在真的很喜欢深奥的领域需要其他任何东西。
您似乎陷入了经典的“狗追逐自己的尾巴”,但为什么呢?
【解决方案3】:
myshopify_domain 通常在会话参数中可用:
如果 !session[:myshopify_domain].nil? && !session[:myshopify_domain].empty?
会话[:myshopify_domain]
别的
session[:myshopify_domain] = ShopifyAPI::Shop.current.myshopify_domain
结束