我有一个带护照库的节点应用程序.我使用这样的护照策略:
passport.use(someStrategy)
以后可以动态地覆盖该策略吗?在应用程序运行期间,我希望在某些时候使用不同的策略.实际上是相同的策略,但配置不同.
如果我只是制作另一个passport.use(someOtherStrategy),那么这不仅仅是为护照添加另一个“中间件”吗?然后那不会删除旧的,只需再添加一个.我希望删除旧的.因此,要么覆盖,要么删除并添加新的.
解决方法
挖掘护照源代码表明,可以轻松完成覆盖.
以下是代码的相关部分:
以下是代码的相关部分:
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你的答案很有帮助,但很少偏离主题.可能部分是因为我不是非常清楚我正在寻找一种覆盖现有策略的方法,而不仅仅是如何配置多种策略.对不起,我在问题描述中并不是很清楚.