javascript - Passport - 动态覆盖策略

标签 javascript node.js passport.js

我有一个带有 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/

相关文章:

javascript - Vuejs 传递数据以从 ajax 请求中选择元素不是 react 性的

javascript - 网站下拉菜单的宽度问题

node.js - 使用 passport.js 推特登录重新登录用户

javascript - 如何从 AJAX 请求执行 Python 代码?

javascript - 检查合并的数组是否包含来自两个数组的项目并更新合并的数组 JS

node.js - 如何在 NodeJs 中使用 Android 推送通知发送 Json 对象

javascript - 将文件从一个文件夹复制到同一存储桶 NODE JS 的 s3 中的另一个文件夹

node.js - Visual Studio Code 提示 #!/usr/bin/env Node

javascript - 错误: invalid_request Missing required parameter: scope (Restify & Passportjs w/Google OAuth2)

node.js - 将 Passport-local 与 Restify 集成时遇到问题