4

Node.js + Express + Everyauth ( https://github.com/abelmartin/Express-And-Everyauth/blob/master/app.js ) を使用して、アプリケーションから Facebook や Twitter などにログインしています。

私が理解しようとしている問題は、Everyauth が「構成して忘れる」ように見えることです。単一の everyauth オブジェクトをセットアップし、それを高速のミドルウェアとして機能するように構成してから、それを忘れます。たとえば、モバイル Facebook ログインを作成する場合は、次のようにします。

var app = express.createServer();
everyauth.facebook
      .appId('AAAA')
      .appSecret('BBBB')
      .entryPath('/login/facebook')
      .callbackPath('/callback/facebook')
      .mobile(true);     // mobile!
app.use(everyauth.middleware());
everyauth.helpExpress(app);
app.listen(8000);

ここに問題があります。モバイル クライアントと非モバイル クライアントの両方がサーバーに接続しますが、接続が確立されるまでどちらが接続しているかわかりません。さらに悪いことに、複数の Facebook アプリ ID をサポートする必要があります (また、クライアントが接続して入力を部分的に解析するまで、どれを使用する必要があるかわかりません)。everyauth は一度構成されたシングルトンであるため、行われた要求に基づいて構成にこれらの変更を加える方法がわかりません。

everyauth オブジェクトを設定するために、everyauth ミドルウェアの前に動作するある種のミドルウェアを作成する必要があるようです。これについてどうすればいいのかわかりません...

提案?

ひどいように思えますが、これが私がこれまでに持っていた最良のアイデアです。それぞれに異なるentryPathを使用して、可能なすべての構成に対してeveryauthオブジェクトを作成します

4

1 に答える 1

0

どうやら私は銃を飛ばして、朝のコーヒーを飲む前にこれを書いたようです。なぜなら、私は自分の質問に答えたからです。実装は非常に簡単でした。基本的には、everyauth がリクエストで汚れた足を取得する前に、everyauth 構成を切り替えるために、独自のカスタム Express ミドルウェアを作成する必要がありました。

var configureEveryauth = function()
{
    return function configure(req, res, next) {
        // make some changes to the everyauth object as needed....          
        next();
    };
}

そして今、私のセットアップは次のようになります:

var app = express.createServer();
everyauth.facebook
  .entryPath('/login/facebook')
  .callbackPath('/callback/facebook');
app.use(configureEveryauth());
app.use(everyauth.middleware());
everyauth.helpExpress(app);
app.listen(8000);

ミドルウェアが不足しているパラメーターを埋めることがわかっているため、起動時にeveryauth Facebookオブジェクトを完全に構成することさえ気にしないことに注意してください。

于 2012-06-23T15:11:48.837 に答える