如何将令牌从中间件传递到路由
这是我的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); } ));
现在我可以在任何路线上访问令牌。