2017-08-28 5 views
5

パスポートライブラリを持つノードアプリケーションがあります。私はこのようなパスポート戦略を使用します:パスポート - 戦略を動的に上書きする

passport.use(someStrategy) 

この戦略を後で動的に無効にすることはできますか?アプリケーションの実行中に、私はある時点で別の戦略を使用したいと思います。実際は同じ戦略ですが、構成は異なります。

もう1つのpassport.use(someOtherStrategy)を作成すると、パスポートに別の「ミドルウェア」を追加するだけですか?そうすれば古いものは削除されず、もう1つだけ追加されます。私は古いものを削除したいと思います。したがって、新しいものを上書きするか、削除して追加してください。

答えて

0

パスポートソースコードを掘り起こすと、簡単に上書きできることが明らかになりました。ここ は、コードの関連部分である:

Authenticator.prototype.use = function(name, strategy) { 
    if (!strategy) { 
    strategy = name; 
    name = strategy.name; 
    } 
    if (!name) { throw new Error('Authentication strategies must have a name'); } 

    this._strategies[name] = strategy; 
    return this; 
}; 
... 
... 
Authenticator.prototype.unuse = function(name) { 
    delete this._strategies[name]; 
    return this; 
}; 

使用する戦略は、それが交換され、すでに_strategiesリスト内の別の戦略で使用されている名前を持っている場合、コードから分かるように、新しい戦略によってまた、コードでも見られるように、メソッドを使用しないで戦略を削除することもできます。

@Mitchあなたの答えは有用ですが、話題はほとんどありません。おそらく、私が、複数の戦略を構成する方法だけでなく、既存の戦略を上書きする方法を模索していたことが、私がはっきりしていなかったためです。申し訳ありませんが、私は質問の説明ではっきりとしていませんでした。

0

同じ種類のパスポートであっても、複数の名前付き戦略をパスポートに設定することは可能です。私は2つの異なるコンフィグとmyStrategyのインスタンスが、異なる名前、例えば

持つことができます下:後から続いて

passport.use('someStrategy', new myStrategy(options)) 
passport.use('anotherStrategy', new myStrategy(differentOptions)); 

を認証する場合は、使用する戦略を指定することができます。

passport.authenticate('someStrategy', ...); 

上記を使用して、複数の戦略を設定し、条件に基づいて、使用する戦略を決定することができます。

if (condition){ 
    passport.authenticate('someStrategy', ...); 
} 
else{ 
    passport.authenticate('anotherStrategy', ...); 
} 

または:

let strategyToUse = determineStrategy(); //dynamically choose which strategy you want 
passport.authenticate(strategyToUse, ...); 

ミドルウェアスタックから戦略を削除するには少しトリッキーだと私は考えていない、それを行うには作り付けの機能はありません。ストラテジをスタックから手動でスプライスすることが含まれます。 This質問はスタックからミドルウェアを削除するのに役立つかもしれません。エクスプレス/コネクトを目的としているので、ある程度パスポートにも適用する必要があります。

関連する問題