【问题标题】:How to dynamically configure Passportjs strategies?如何动态配置 Passportjs 策略?
【发布时间】:2017-08-21 16:40:07
【问题描述】:

我正在玩弄护照,并以这种方式配置我的 Twitter 登录:

passport.use(new TwitterStrategy({
    consumerKey: '*****',
    consumerSecret: '*****',
    callbackURL: "http://blabla/callback"
  },
  function(token, tokenSecret, profile, done) {
    done(null, profile)
  }
));

我希望能够根据登录的用户在运行时配置以下值:(consumerKey, consumerSecret, callbackURL)。也就是说,每个用户都将拥有他们需要在 Twitter 上注册的 Twitter 应用程序。

有什么建议吗?

【问题讨论】:

  • 你有多个 twitter 的 api 密钥/秘密吗?
  • 我也有一个类似的问题,我有一个多租户的应用程序,因此连接到多个 google、facebook、twitter 应用程序。
  • @onuriltan:我假设是这样,每个用户都有自己的密钥/秘密对。
  • 您提供给 TwitterStrategy 构造函数的 Twitter 消费者密钥/秘密不属于用户,它们属于您用于验证 Twitter 用户,而作为回调参数的配置文件对象才是最重要的,所以在我看来,只需使用您的消费者密钥/秘密就可以了。你的应用程序中有多个租户,你有多个 Twitter 应用程序用于特定案例是什么意思?
  • 是的,我的情况和问题中描述的情况是当您拥有多个 Twitter 应用程序时。例如,同一个节点应用程序是一个服务于 Linux.com 和 freebsd.com 的 CMS,人们可以登录其中一个,每个人都有自己的 Twitter 应用程序。很正常的多租户。

标签: javascript node.js express passport.js


【解决方案1】:

可以直接将策略传递给authenticate()(而不是传递策略名称),而不是提前向passport.use() 注册策略。

例如:

function login(req, res, next) {
  var user = req.user;
  var consumerKey = getConsumerKeyForUser(user);
  // Create a strategy instance specifically for this user.
  var strategy = new TwitterStrategy({ consumerKey: consumerKey }, ...);
  // Authenticate using the user-specific strategy
  passport.authenticate(strategy)(req, res, next);
}

可以在此处找到有关此技术的更多信息:https://medium.com/passportjs/authenticate-using-strategy-instances-49e58d96ec8c

【讨论】:

  • 这似乎有效。 TypeScript 中该函数的类型不接受策略,因此,我将为此提交错误报告。
【解决方案2】:

您需要使用您的消费者密钥和消费者密码,而不是您的用户。然后,您的应用程序将能够使用 Twitter 对 您的用户 进行身份验证。但这些密钥和机密用于向 Twitter API 验证您的应用。

查看此示例项目:

【讨论】:

  • 这不是我要的,它不是一个普通的应用程序,它是对各种应用程序进行身份验证的代理。我希望每个用户都能够提供其秘密/appId 并使用它们。我知道在为我的应用程序验证用户的情况下它是如何工作的。
  • @ciaoben 然后只需使用用户提供的值作为 TwitterStrategy 构造函数的参数。请记住,您需要为每个客户保留一个 TwitterStrategy 对象和一个护照中间件实例。他们需要给你这些价值观,我希望这是最难的部分。确保它不违反 Twitter API TOC。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 2011-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多