我最近遇到过这样的情况:用户卸载了我的 Shopify 应用程序并立即重新安装。这导致了一个问题,因为我将所有用户存储在数据库表中。
登录/安装工作如下:
- 用户告诉我他的商店网址
- 我将用户转发至
example.myshopify.com/admin/oauth/authorize 授予访问权限的位置
到我的应用程序
- I check if that shop URL is already stored in my local
user DB
- 如果不是:我请求永久访问令牌并转发
用户进入计划选择页面
- 如果是:我从用户数据库获取存储的永久访问令牌并将用户登录到我的应用程序
卸载:
- 用户在他的 Shopify 后端卸载我的应用程序
- Shopify 向我的应用程序发送网络钩子
- 我从用户数据库中删除该用户的数据
问题是网络钩子有时会延迟。如果用户卸载并立即重新安装,我的应用程序将认为该安装是一次登录尝试,并将使用存储在用户数据库中的现在无效的访问令牌。
我想我可以检查授权页面的重定向是否包含临时访问令牌,如果是,则这将是新安装,但即使应用程序已经安装,访问令牌似乎也会返回。
所以我的问题是:如何优雅地处理即时重新安装?当然,我忽略了一些事情,Shopify API 中不可能存在如此巨大的“逻辑错误”?
最近我的应用程序也遇到了这个问题。 Webhooks 在过去 2 个月才开始出现延迟,如果大多数应用程序现在没有遭受此回归错误的困扰,我会感到惊讶。
我处理它的方式是 - 当用户重定向到应用程序并且旧的数据库对象/令牌仍然存在于数据库中时,尝试使用令牌对 Shopify API 进行虚拟 API 调用(类似于获取商店详细信息)你有。如果您收到 403 Unauthorized 响应,则使用户会话无效并刷新存储的令牌。
另一个问题是,一两分钟后,当原始卸载 Webhook 触发时,执行相同的过程 - 检查 403 响应。如果你DON'T得到 403,那么您就知道 webhook 是旧的,不应该对其进行操作,因为如果您得到 200 OK,则意味着您的令牌是好的并且该应用程序仍然安装。
这有点复杂,它在我的应用程序中添加了相当多的代码,但这是我在短时间内能想到的唯一事情 - 因为商家确实经常快速卸载/重新安装。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)