Application Passwordsが機能しない
GraphQLエンドポイントへのリクエストを認証するためにApplication Passwordsを使用しているにもかかわらず機能しない場合、サイトにインストールされているプラグインとの競合が起きている可能性があります。特に、WooCommerceがサイトにインストールされて有効化されている場合に発生することがあります。
Application Passwordを使用してGraphQLエンドポイントへのリクエストを行い、ユーザー認証が失敗する場合で、かつGato GraphQLで以下のいずれかを行っている場合:
- GraphQL Single Endpointのパスを変更した
- Custom EndpointsまたはPersisted Queriesのベーススラッグを変更した
- 任意のエンドポイントを無効化した(対応するモジュールを無効化することによって)
...競合を避けるため、同じ変更をフック経由でも適用する必要があります。
なぜこの問題が起きるのか
WooCommerceの初期化とGato GraphQLのサービスコンテナのセットアップ間でタイミングの競合が発生しています。
WooCommerceは初期化プロセス中にapplication_password_is_api_requestフィルターをトリガーします。Gato GraphQLがまだ初期化されていないため、リクエストがGraphQLエンドポイントから来ているかどうかを判断し、認証にApplication Passwordsを使用できるようにするための正しいエンドポイントパスをデータベースから取得できない状態にあります。
回避策
application_password_is_api_requestフィルターがWooCommerce(または別のプラグイン)によってトリガーされると、Gato GraphQLはGraphQLエンドポイントのデフォルトパスを仮定します。
そのため、プラグインの設定からいずれかの公開エンドポイントのパスを変更した場合は、フック経由でも同じ変更を適用する必要があります。
解決策については、ガイド フック経由でGraphQLエンドポイントパスの変更を複製する をお読みください。