3

Google OAuth gemで Devise を使用して、Google ユーザーに自分のアプリの認定を取得する Rails アプリがあります。

OAuth についての私の理解では、信頼できるサイト (Google) の言葉を利用して、ユーザーは自分自身であると言っています。その後、ユーザーが Google アカウントにログインしているという事実は、私たちのサイトとは関係がないはずです。ただし、ユーザーのログインを Google でのログイン状態と結び付けたいと考えています。ユーザーが Google からログアウトした場合は、アプリからもログアウトしたいと考えています。

解決策をネットで検索していると、反対の質問が思い浮かびます。ユーザーがアプリを使い終わったときに、ユーザーを Google からサインアウトするにはどうすればよいでしょうか? それはクレイジーです。

理想的には、Google は、ユーザーがログアウトしたときにアプリケーションに通知するコールバック API を提供します。ユーザーが Google アカウントにログインしているかどうかを判断できる別のハッキーなソリューションも見ましたが、もう少し正確なもの (特定のユーザーと任意のユーザー) を好むでしょう。

また、Google の Contacts API を使用してステータスを判断できるというヒントも見ました。

アップデート

この 1 週間、これについていくつかの調査を続けてきました。調査結果をここに投稿します。OAuth2 プロセスの Google ドキュメントを見ると、似ているが異なる 2 つの設定があるようです。

  1. Web サーバーの OAuth2
  2. ログイン用 OAuth2

私のサービスに人々をログインさせるために私が採用しているDevise戦略gemは、これらの最初のものを採用しているようです. ただし、2 番目の手法は同じエンドポイントを使用し、ほぼすべて同じパラメーターを使用します。ドキュメントには、最初の手法がこれにも適用されると記載されています。

しかし、私が発見した 1 つの可能性は、ログイン (2 番目) プロセスに「なし」値を受け入れる「プロンプト」パラメーターがあることです。これが設定されている場合、ユーザーがすでにログインしている場合、認証リクエストはすぐにエラーを返すとドキュメントは述べています。ユーザーの電子メールアドレスを提供できる「login_hint」パラメーターと組み合わせると、これが問題を解決するための明確な道になります。

しかし。2 番目の手法を使用すると、実際にログインしているかどうかに関係なく、認可リクエストは常にすぐにエラーを返します。私が実際に最初の方法でログインしているという事実と何か関係があるのだろうか? これを適切にテストするには、認証システムを完全に破壊して、この 2 番目の手法に置き換える必要があります。

4

0 に答える 0