セッションを確立するために、たとえば Facebook や Twitter の認証トークンを API にポストする Torii アダプターがあります。私のアダプターのopen()
メソッドでは、さまざまなタイプのプロバイダーを処理する方法に関するいくつかのロジックを記述するために、プロバイダーの名前を知りたいです。例えば:
// app/torii-adapters/application.js
export default Ember.Object.extend({
open(authorization) {
if (this.provider.name === 'facebook-connect') {
var provider = 'facebook';
// Facebook specific logic
var data = { ... };
}
else if (this.provider.name === 'twitter-oauth2') {
var provider = 'twitter';
// Twitter specific logic
var data = { ... };
}
else {
throw new Error(`Unable to handle unknown provider: ${this.provider.name}`);
}
return POST(`/api/auth/${provider}`, data);
}
}
しかし、もちろん、this.provider.name
それは正しくありません。アダプターメソッド内から使用されるプロバイダーの名前を取得する方法はありますか? 前もって感謝します。
更新:それを行うにはいくつかの方法があると思います。最初の方法は、を呼び出す前に localStorage (または sessionStorage) にプロバイダー名を設定し、open()
その値を上記のロジックで使用することです。例えば:
localStorage.setItem('providerName', 'facebook-connect');
this.get('session').open('facebook-connect');
// later ...
const providerName = localStorage.getItem('providerName');
if (providerName === 'facebook-connect') {
// ...
}
もう 1 つの方法は、異なるプロバイダー用に個別のアダプターを作成することです。app-name/torii-adapters/facebook-connect.js
Torii には、たとえばに戻る前に探すコードがありますapp-name/torii-adapters/application.js
。プロバイダー固有のロジックを別のファイルに配置すると、うまくいきます。ただし、セッションを保存、フェッチ、および閉じるための共通のロジックがあるため、それをどこに配置すればよいかわかりません。
更新 2: Torii は、torii-adapters (例: facebook-connect.js、twitter-oauth2.js) の下にあるさまざまなアダプターを見つけるのに問題があります。共通の機能を含むすべてのアダプターの親クラスを作成しようとしていました。ふりだしに戻る...
更新 3: @Brou が指摘するように、また私が Torii チームと話をして学んだように、セッションのフェッチとクローズは、プロバイダーに関係なく、共通のアプリケーション アダプター ( app-name/torii-adapters/application.js
) ファイルで行うことができます。プロバイダー固有のセッション開始ロジックが必要な場合はapp-name/torii-adapters/facebook-oauth2.js
、アプリケーション アダプターをサブクラス化する (またはサブクラス化しない) 複数の追加アダプター (例: ) を使用できます。
Torii でのセッションのライフサイクルについて: https://github.com/Vestorly/torii/issues/219
複数のアダプターのパターンについて: https://github.com/Vestorly/torii/issues/221
Torii 0.6.0の新しいauthenticatedRoute()
DSL と auto-session-fetching について: https://github.com/Vestorly/torii/issues/222
更新 4:個人の Web サイトに調査結果と解決策を書きました。これは、私の元の投稿、@brou、およびその他の情報源からのいくつかのアイデアをカプセル化したものです。ご不明な点がございましたら、コメントでお知らせください。ありがとうございました。