Javascript 如何动态配置Passportjs策略?

Javascript 如何动态配置Passportjs策略?,javascript,node.js,express,passport.js,Javascript,Node.js,Express,Passport.js,我正在使用passport,并通过以下方式配置我的twitter登录: passport.use(new TwitterStrategy({ consumerKey: '*****', consumerSecret: '*****', callbackURL: "http://blabla/callback" }, function(token, tokenSecret, profile, done) { done(null, prof

我正在使用passport,并通过以下方式配置我的twitter登录:

passport.use(new TwitterStrategy({
    consumerKey: '*****',
    consumerSecret: '*****',
    callbackURL: "http://blabla/callback"
  },
  function(token, tokenSecret, profile, done) {
    done(null, profile)
  }
));
我希望能够在运行时根据登录的用户配置以下值:(consumerKey、ConsumerCret、callbackURL)。也就是说,每个用户都将拥有他们需要在Twitter上注册的Twitter应用程序


有什么建议吗?

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

请参见此示例项目:


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

例如:

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);
}

有关此技术的更多信息,请参见此处:

这不是我要问的,它不是一个普通的应用程序,而是用于验证各种应用程序的代理。我希望每个用户都能够提供其机密/appId并使用它们。我知道它在为我的应用验证用户时是如何工作的。@ciaoben然后只使用用户提供的值作为TwitterStrategy构造函数的参数。请记住,您需要为每个客户保留一个TwitterStrategy对象和一个passport中间件实例。他们需要给你这些价值观,我希望这是最难的部分。确保它不违反Twitter API TOC。您是否有多个用于Twitter的API密钥/机密?我也有一个类似的问题,我有一个多租户的应用程序,因此连接到多个google、facebook和Twitter应用程序。@onuriltan:我假设是这样,每个用户都有自己的密钥/密码对。您提供给TwitterStrategy构造函数的Twitter使用者密钥/密码不属于用户,它们属于您,用于验证Twitter用户,而作为回调参数的配置文件对象才是最重要的,所以我认为使用您的使用者密钥/密码就可以了。你在应用程序中有多个租户是什么意思?你在一个特定案例中有多个Twitter应用程序?是的,我有,问题中描述的案例是当你有多个Twitter应用程序时。例如,同一个节点应用程序是一个服务于Linux.com和freebsd.com的CMS,人们可以登录其中任何一个,每个人都有自己的Twitter应用程序。非常普通的多租户。这似乎起作用了。TypeScript中该函数的类型不接受策略,因此,我将为此提交一份错误报告。