13

最近、ユーザーが私の Shopify アプリをアンインストールし、すぐに再インストールしたというケースがありました。すべてのユーザーを DB テーブルに保存しているため、これが問題を引き起こしました。

ログイン/インストールは次のように機能します。

  1. ユーザーは自分のショップの URL を教えてくれます
  2. アプリへのアクセスが許可されている example.myshopify.com/admin/oauth/authorize にユーザーを転送します
  3. そのショップの URL がローカル ユーザー DB に既に保存されているかどうかを確認します
    • そうでない場合: パーマネント アクセス トークンを要求し、ユーザーをプラン選択ページに転送します
    • はいの場合: ユーザー DB から保存された永久アクセス トークンを取得し、ユーザーをアプリにログインさせます。

アンインストール:

  1. ユーザーが自分の Shopify バックエンドでアプリをアンインストールする
  2. Shopify が Webhook をアプリに送信する
  3. そのユーザーのデータをユーザー DB から削除します

問題は、Webhook が時々遅れることです。ユーザーがアンインストールしてすぐに再インストールすると、アプリはインストールがログイン試行であると見なし、ユーザー DB に保存されている無効になったアクセス トークンを使用します。

認証ページからのリダイレクトに一時的なアクセストークンが含まれているかどうかを確認でき、含まれている場合は新規インストールになると思いましたが、アプリが既にインストールされていてもアクセストークンが返されるようです。

私の質問は次のとおりです。インスタント再インストールを適切に処理するにはどうすればよいですか? 確かに私が見落としているものがあります.Shopify APIにそのような巨大な「論理バグ」があるはずはありません?

4

1 に答える 1

19

最近、アプリでもこの問題が発生しました。Webhook が遅延し始めたのは、ここ 2 か月のことです。現在、ほとんどのアプリがこの回帰バグに悩まされていないとしたら、私は驚かれることでしょう。

私が対処する方法は次のとおりです-ユーザーがアプリにリダイレクトされ、古いデータベースオブジェクト/トークンがまだデータベースに存在する場合、トークンを使用して Shopify API へのダミー API 呼び出し (ショップの詳細を取得するようなもの) を呼び出してみてくださいあなたが持っている。403 Unauthorized 応答を受け取った場合は、ユーザー セッションを無効にし、保存されているトークンを更新します。

もう 1 つの問題は、元のアンインストール Webhook が起動してから 1 ~ 2 分後に、同じ手順を実行して 403 応答を確認することです。403 が返されない場合は、 Webhookが古いため対処すべきではないことがわかります。これは、200 OK が返された場合、トークンが正常で、アプリがまだインストールされていることを意味するためです。

少し複雑で、アプリにかなりのコードを追加しましたが、すぐに思いつくのはこれだけでした。なぜなら、商人はかなり頻繁にすばやくアンインストール/再インストールするからです。

于 2013-01-20T00:19:03.607 に答える