13

我最近遇到了用户卸载我的 Shopify 应用程序并立即重新安装它的情况。这导致了一个问题,因为我将所有用户都存储在数据库表中。

登录/安装工作如下:

  1. 用户告诉我他的商店 URL
  2. 我将用户转发到 example.myshopify.com/admin/oauth/authorize,其中授予我的应用程序访问权限
  3. 我检查该商店 URL 是否已存储在我的本地用户数据库中
    • 如果不是:我请求永久访问令牌并将用户转发到计划选择页面
    • 如果是:我从用户数据库获取存储的永久访问令牌并将用户登录到我的应用程序

卸载:

  1. 用户在他的 Shopify 后端卸载我的应用
  2. Shopify 向我的应用发送 webhook
  3. 我从用户数据库中删除了该用户的数据

问题是 webhook 有时会延迟。如果用户卸载并立即重新安装,我的应用程序会认为安装是一次登录尝试,并将使用存储在用户数据库中的现在无效的访问令牌。

我想我可以检查来自授权页面的重定向是否包含临时访问令牌,如果是,这将是一个新安装,但即使已经安装了应用程序,似乎也会返回访问令牌。

所以我的问题是:如何优雅地处理即时重新安装?当然,我忽略了一些东西,Shopify API 中不可能有这么大的“逻辑错误”吗?

4

1 回答 1

19

最近我的应用程序也遇到了这个问题。Webhooks 在过去 2 个月才开始延迟,如果现在大多数应用程序没有遭受这种回归错误,我会感到惊讶。

我处理它的方式是 - 当用户被重定向到应用程序并且旧的 db 对象/令牌仍然存在于数据库中时,尝试使用令牌调用 Shopify API 的虚拟 API 调用(类似于获取商店详细信息)你有。如果您收到 403 Unauthorized 响应,请使用户会话无效并刷新存储的令牌。

另一个问题是,当原始卸载 webhook 触发后一两分钟后,执行相同的过程 - 检查 403 响应。如果您没有收到 403,那么您就知道 webhook 已经过时并且不应该采取行动,因为如果您收到 200 OK 这意味着您的令牌是好的并且该应用程序仍在安装中。

这有点令人费解,它在我的应用程序中添加了相当多的代码,但这是我能在短时间内想到的唯一事情 - 因为商家确实经常快速卸载/重新安装。

于 2013-01-20T00:19:03.607 回答