我有一个带有 Passport 库的 Node 应用程序。我使用这样的 Passport 策略:
passport.use(someStrategy)
以后是否可以动态覆盖该策略?在应用程序运行期间,我想在某个时候使用不同的策略。实际上是相同的策略,但配置不同。
如果我只制作另一个 passport.use(someOtherStrategy),那么不就是向 passport 添加另一个“中间件”吗?那不会删除旧的,只需添加一个。我希望旧的被删除。因此,要么覆盖,要么删除并添加一个新的。
最佳答案
深入研究 passport 源代码后发现,重写很容易完成。 这是代码的相关部分:
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 您的回答很有帮助,但几乎没有偏离主题。可能部分是因为我不是很清楚我正在寻找一种方法来覆盖现有策略,而不仅仅是如何配置多个策略。抱歉,我的问题描述不是很清楚。
关于javascript - Passport - 动态覆盖策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45913607/