OAuth: ユーザーJSON呼び出し成功後に/loginへリダイレクト

OAuth2 ベースの私の設定が非常に奇妙な挙動を示しています。初期設定時にいくつかのエラーがありましたが、それらは解決しました。しかし現在、Discourse → Cognito 認可エンドポイント → Discourse コールバック → Discourse /login というフローが確認できます。ログには警告やエラーは表示されておらず、ログを確認するとユーザーデータを取得するための JSON 呼び出しが正常に完了していることがわかります。

トークンの取得と JSON データの読み込みが成功しているように見えるため、ユーザーアカウントが正常に登録されることを期待していましたが、実際にはユーザーはログインページにリダイレクトされてしまいます。

以下にログを示します。

OAuth2 デバッグ: after_authenticate 応答: creds: {"token"=>"eyJraWQiOiJ3YW8zbVBRWmh2Z2F6YldNaU5jS3ZOdVdRMXRmcm1ya2ZVZ2RvVjVYSG1RPSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiJkNzhkZDliNS03Mjc2LTQ5OWEtYjdiN
7:48 pm
OAuth2 デバッグ: user_json_url: GET https://api.lifebac.com/token/details?token=eyJraWQiOiJ3YW8zbVBRWmh2Z2F6YldNaU5jS3ZOdVdRMXRmcm1ya2ZVZ2RvVjVYSG1RPSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiJkNzhkZDliNS03Mjc
7:48 pm
OAuth2 デバッグ: user_json_response: #<Excon::Response:0x00007f36a7608a30 @data={:body=>"{\"id\":\"d78dd9b5-7276-499a-b7b6-02da38e03ce9\", ...}", :cookies=>[], :host=>"api.lifebac.com", :headers=>{"Conten
7:48 pm
OAuth2 デバッグ: user_json: {"id"=>"d78dd9b5-7276-499a-b7b6-02da38e03ce9", ...}

何が起きているのかについてのご助言をいただければ非常に助かります。必要であればバックトレースも喜んで提供いたします。

リダイレクトは正常ですが、登録ポップアップも表示されるはずです。それは表示されていますか?

ユーザーアカウントは、ユーザーがアカウント情報を確認して「作成」を押した後にのみ作成されます。

こんにちは、デビッドさん。

残念ながら、すべての情報を入力しない限り、確認できる情報が表示されず、何も確認できません。

また、ユーザーを自動承認することは可能でしょうか?彼らのメールアドレスはすでに当方で確認済みですので、ユーザーにとって可能な限りシームレスな体験を維持したいと考えております。

ポップアップをスキップすることは現時点ではできませんが、ID プロバイダーからのデータで自動的にすべてが埋められるはずです。

OAuth2 設定の値は何ですか?例として oauth2_json_email_path を取り上げます。

また、すべてのキーを確認できるように、ログから完全な “user_json” 行を共有していただけますか(メールは伏せていただいて結構です)。

完全なデータは以下の通りです。

{"id"=>"d78dd9b5-7276-499a-b7b6-02da38e03ce9", "username"=>"patrick2"}

適用対象のフィールドの値は「id」と「username」でした。

現在、エンドポイントを更新してメールと名前を追加していますが、id と username だけが必須であると認識していました。

ありがとうございます

パトリック

Discourse アカウントに接続するために必要な最小限のデータは id です。ただし、Discourse にはユーザー名とメールアドレスが必要です。そのため、サインアップモーダルが表示されます。

OAuth API にその情報を追加できれば、ユーザーにとってよりスムーズになります :+1:

はい、今その件を確認しています!エンドポイントをメールも含まれるように更新し、これで解決するか確認します。

ただし、その場合、少なくともユーザー名はサインアップページに渡されるはずです。

ありがとうございます。

パトリック

はい、そのはずです。oauth2_json_username_pathusername に設定しましたか?

@david さん、ありがとう!データを使ってすべて動作するようになりました。

OAuth ユーザーを自動確認するフラグをリクエストする正しい方法はありますか?

ありがとう

Patrick

「自動承認」とはどういう意味でしょうか?メール確認をスキップすることですか?それとも登録モーダルをスキップすることですか?

前者は既に実装可能です。後者については、近日中に実装する予定で検討中です。

完璧です!私が言いたかったのは二番目です!でも、もしそれがすでにあなたの認識にあるなら、すべて大丈夫ですよ!

Automatically provision accounts with external SSO provider? (skip Create New Account prompt) - #6 by david にある新しい external_auth_skip_create_confirm 設定は、OAuth2 でもサポートされていますか?

もちろんそうです!Discourse のすべての認証プロバイダー(Facebook、GitHub、Google など)でサポートされています :smiley: