我正在使用passport-freshbooks策略,就像任何其他策略一样,除了我认为它没有正确编写(如果我没有遗漏任何东西)。我发现你需要在定义阶段将变量传递给它的中间件,你只能通过路由处理程序从用户那里获得。
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
?
它可能需要改变策略本身,但我不确定如何继续,任何想法?
答案 0 :(得分:2)
Passport有一个“passReqToCallback”选项,可以在您的策略中访问您的请求对象。启用此选项后,req将作为验证回调的第一个参数传递。
这里用于一个例子。 (来自他们的docs)
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);
}
}
));
答案 1 :(得分:0)
我最终攻击了图书馆并让它在某一点上工作。最终,我放弃了项目,所以我没有任何分享的修复。但是,如果你正在考虑修改策略,那么你就是在正确的道路上。