DiscourseプラグインにおけるimgurのOAuth 2フロー

こんにちは、

当社の Discourse インスタンス向けに非常に特殊なプラグインを構築しており、いくつか質問があります。

ある時点で、このプラグインは Discourse のトピック画像のコレクションを Imgur に送信する必要があります。画像を収集する部分はすでに完了しています。

現在、Imgur API の OAuth2 フローを使用して認証を試みています。プラグイン用の管理 UI を作成し、ボタンを押して Imgur アカウントでプラグインを承認できるようにしました。ユーザーがログインすると、コールバック URL(Discourse インスタンスとプラグイン内で作成した特定ルートとして設定)がアクセストークンと共に呼び出されます(例を参照)。

http://localhost:3000/admin/plugins/plugin_name/callback#access_token=<token>&...

質問:このトークンをどのように取得すればよいでしょうか?どこから始めればよいのか見当もつきません。

トークンはハッシュパラメータとして返されるため、JS 側で処理する必要があると考えています。コールバック URL 用のコントローラーとルートを設定してみましたが、URL(特にハッシュ部分)をそこから読み取る方法がわかりません(Ember.js のドキュメントや Stack Overflow にも役立つ情報が見つかりませんでした)。さまざまなイベントリスナーを設定しようとしましたが、トリガーされないようです。

2 番目の質問:トークンとリフレッシュトークンはどこに保存すべきでしょうか?プラグインからシステム設定として保存することは可能でしょうか?PluginStore について聞いたことがありますが、これは Ruby 側からのみアクセス可能(つまり、クライアントがこれらのトークンをサーバーに送信するためのエンドポイントを作成する必要がある)とのことです。また、セキュリティの観点から安全でしょうか?

ありがとうございます!

編集:ルートファイル名にタイプミスがあり、's’が抜けていたため、何もしませんでした…

localhost への HTTP 経由ではこれを実現できませんhttps://ngrok.com/ のようなツールを使って HTTPS をシミュレートするか、ドメインを付与してクラウド上で HTTPS モードで開発サーバーを実行することをお勧めします。

それが必要だと思っていたのですが、ローカル URL に正しくリダイレクトされ、URL にトークンが表示されます。

はい、その通りです。クライアントは HTTP を使用できます。ただし、通信が傍受されトークンが読み取られる可能性があるため、そもそも OAuth2 を使用する意味がありません。個人的には、コードが正しく動作していることを確認するため、開発環境でも最終的なプロトコル全体を使用する方が安心です。

ああ、確かにその通りです。現時点では開発目的だけですね。もちろん、本番環境では https を使いますよ。