这是我的 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);
});
}
));
然后是我的回调路线:
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
});
我只是在此回调中从 req
获取变量 oauth
时遇到问题,因此我可以获取访问 token 并将其设置在 req.sessions
在这里。
*当然,我没有同时使用这两个 var oauth = ...
语句。为了简洁起见,将它们放在一起显示。
最佳答案
所以我在 Google Group thread 中看到了这个功能然后the docs :
passReqToCallback: true
因为现在我想做的就是将 token 保存到 session 中,所以我可以这样做:
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);
}
));
现在我可以通过任何路线访问 token 。
关于node.js - 如何将 token 从中间件传递到路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25234338/