0

我正在使用护照新书策略,这与任何其他策略非常相似,只是我认为它的创作不正确(如果我没有遗漏任何东西)。我发现您需要在其定义阶段将一个变量传递给它的中间件,您只能通过路由处理程序从用户那里获得。

passport.use(new FreshbooksStrategy({
    // This is the USER's subdomain, who's supposed to login
    subdomain: SUBDOMAIN,
    ...

要设置subdomain上述内容,您需要先从用户那里获取

app.get('/login', function(req,res){
    res.send('<form>Enter your freshbooks account URL or subdomain(..submit)</form>')
});
app.post('/login', function(req,res){
    var subdomain = req.body.subdomain.split('.')[0].split('/').pop();
});

那么我如何subdomain在上面的护照策略的中间件定义中设置它呢?

它可能需要改变策略本身,但我不确定如何进行,有什么想法吗?

github上的问题

4

2 回答 2

2

Passport 有一个“passReqToCallback”选项,使您的请求对象可以在您的策略中访问。启用此选项后, req 将作为第一个参数传递给验证回调。

这里它被用于一个例子。(从他们的文档中获得)

passport.use(new TwitterStrategy({
    consumerKey: TWITTER_CONSUMER_KEY,
    consumerSecret: TWITTER_CONSUMER_SECRET,
    callbackURL: "http://www.example.com/auth/twitter/callback",
    passReqToCallback: true
  },
  function(req, token, tokenSecret, profile, done) {
    if (!req.user) {
      // Not logged-in. Authenticate based on Twitter account.
    } else {
      // Logged in. Associate Twitter account with user.  Preserve the login
      // state by supplying the existing user after association.
      // return done(null, req.user);
    }
  }
));
于 2016-04-07T15:58:45.437 回答
0

我最终破解了图书馆并让它在某一时刻工作。最终,我放弃了这个项目,所以我没有任何修复可以分享。但是,如果您正在考虑修改策略,那么您就走在了正确的道路上。

于 2015-07-02T13:35:31.007 回答