背景
scope に変更があった際は再認証を行う必要があります。
そこで以下の様な URL にユーザーを redirect するよう実装していたのですが、無限ループが発生したりどうにもうまく行かない状況でした。
https://{shop}.myshopify.com/admin/oauth/authorize?client_id={api_key}&scope={scopes}&redirect_uri={redirect_uri}&state={nonce}
参照: Ask for permission | Shopify Developers
参照: Infinite redirect between /login, Home#index, and /granted_storage_access | shopify_app
解決策
omniauth-shopify-oauth2 の下記の issue に回答があるように、シンプルに /login
にアクセスする事で再認証画面に遷移されました。
https://github.com/Shopify/omniauth-shopify-oauth2
https://{shop}.myshopify.com/admin/apps/{app_name}/login
注意点
-
/login
にアクセスする前にconfig/initializers/shopify_app.rb
等で定義されている scope をまずは更新する必要があります。(サーバーの再起動も忘れずに) - 既に認証されている scope と新しい scope に差分がある場合のみ再認証画面に遷移されます。
- shopify_app v17.1.0 からは再認証処理を自作しなくて良くなりました。
参照
- How to update scopes and then allow user to re-auth? | omniauth-shopify-oauth2
- Shopify Public アプリの OAuth scope を後から変更する方法 | Zenn
- Authenticate with OAuth | Shopify Developers
- Handle changes to access scopes requested by your app | Shopify Developers
- Handling changes in access scopes | shopify_app
- How to re-auth shop for new scope? | shopify_app