【问题标题】:Shopify Uninstall Webhook Firing RandomlyShopify 卸载 Webhook 随机触发
【发布时间】:2018-08-15 12:45:55
【问题描述】:

背景

我正在构建 Shopify 嵌入式应用,并在用户卸载应用后依靠应用/卸载 webhook 撤消用户访问权限。我通过从我的数据库中删除他们的访问令牌并将它们添加到卸载列表来撤销他们的访问权限。

问题

Shopify 应用/卸载 webhook 多次触发,有时非常随机(即凌晨 3 点)。这会导致问题,因为偶尔如果用户重新安装应用,我会随机触发卸载 webhook 并删除他们的访问权限.

问题

什么是处理 Shopify webhook 及其潜在随机性/重复性的负责任方式,以便我在处理卸载时有信心?

【问题讨论】:

    标签: shopify webhooks shopify-app


    【解决方案1】:

    经过相当多的测试和论坛研究,我找到了一个很好的防御性编码策略来应对 Shopify webhook 的随机性。

    解决方案

    防御性代码!不要仅仅依靠 webhook 来触发数据库操作。请参阅下文了解我的防御性编码实践。

    1. 当您收到卸载 webhook 时,请快速响应状态 200。Shopify 要求您在 5 秒内做出响应。如此快速地验证 webhook,将其有效负载添加到队列中,然后以状态 200 响应。我添加的有效负载只是已卸载商店的名称。请求正文中发送的数据只是有关商店的信息。它不包含任何关于触发的 webhook 的独特之处,以将其与可能为同一商店触发的其他卸载 webhook 区分开来。
    2. 您的队列应该是一个列表,一旦添加了新节点,该列表就会触发另一个函数运行。通过使用队列来完成繁重的工作,您可以花更多时间执行数据库操作,而不必担心 5 秒的响应时间。我将 Firestore 用于数据库和 Cloud Firestore Triggers。用于队列处理的后端设置运行良好。我的函数只运行新商店卸载节点的 onCreate(),因此即使多个卸载 webhook 背靠背触发,我的函数也只运行一次。
    3. 当一个新的卸载被添加到我的队列时我运行的函数首先检查我是否可以使用我已经保存在我的数据库的用户节点的其他地方的商店访问令牌。如果我被阻止使用访问令牌,那么这实际上是真正的卸载,应该进行处理。如果我仍然可以使用访问令牌,则应忽略卸载。
    4. 当用户重新安装应用程序时,我会将它们从我的卸载队列中删除,并再次通过身份验证过程发送它们以获取新的访问令牌。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多