如何将令牌从中间件传递到路由

这是我的Passport中间件。 我正在自动Instagram的,你可以看到:

// Use the InstagramStrategy within Passport. // Strategies in Passport require a `verify` function, which accept // credentials (in this case, an accessToken, refreshToken, and Instagram // profile), and invoke a callback with a user object. passport.use(new InstagramStrategy({ clientID: INSTAGRAM_CLIENT_ID, clientSecret: INSTAGRAM_CLIENT_SECRET, callbackURL: INSTAGRAM_CALLBACK_URL }, function(accessToken, refreshToken, profile, done) { // asynchronous verification, for effect... process.nextTick(function () { var oauth = {'accessToken' : accessToken, 'refreshToken' : refreshToken, 'profile' : profile }; return done(null, oauth); }); } )); 

然后我的callback路线:

  app.get('/auth/instagram/callback', passport.authenticate('instagram', { failureRedirect: '/home/language' }), function(req, res) { var oauth = req.get({oauth : oauth}); // Tried this first var oauth = req.oauth; // And this second }); 

我只是在这个callback中获取req的variablesoauth遇到问题,所以我可以获取访问标记并将其设置在req.sessions

当然,我同时没有那两个var oauth = ...语句。 只是为了简洁而将它们一起展示。

所以我在Google Group主题中看到了这个function,然后是文档 :

 passReqToCallback: true 

因为现在我所要做的只是将令牌保存到会话中,我可以这样做:

  passport.use(new InstagramStrategy({ clientID: INSTAGRAM_CLIENT_ID, clientSecret: INSTAGRAM_CLIENT_SECRET, callbackURL: INSTAGRAM_CALLBACK_URL, passReqToCallback: true // ADD THIS! }, function(req, accessToken, refreshToken, profile, done) { // `req` is first parameter req.session.IGAccessToken = accessToken; // Set tokens on session req.session.IGRefreshToken = refreshToken; return done(null, profile); } )); 

现在我可以在任何路线上访问令牌。