在callback函数中,Passport-Facebook访问req对象

在Facebook上为nodejs护照authenticationcallback,你如何获得callback中的req对象?

 passport.use(new FacebookStrategy({ clientID: 123456789, clientSecret: 'SECRET', callbackURL: "http://example.com/login/facebook/callback" }, function(accessToken, refreshToken, profile, done){ // Is there any way to get the req object in here? } )); 

设置passReqToCallback选项,如下所示:

 passport.use(new LocalStrategy({ passReqToCallback: true }, function(req, username, password, done) { User.findOne({ username: username }, function (err, user) { if (err) { return done(err); } if (!user) { return done(null, false); } if (!user.verifyPassword(password)) { req.flash('error', 'Your password is too long'); req.flash('error', 'Also, it is too short!!!'); return done(null, false); } return done(null, user); }); } )); 

req成为validationcallback的第一个参数

按照https://github.com/jaredhanson/passport/issues/39

我回答得太晚,但我认为我的解决scheme更好,更传统。 在这里的官方文档。 有一节“ validationcallback中的关联 ”,其中提到,如果我们将策略的passReqToCallback选项设置为true ,则启用req ,并将其作为第一个parameter passing给validationcallback。

所以我的FacebookStrategy现在看起来像:

 var User = require('../models/UserModel.js'); var FacebookStrategy = require('passport-facebook').Strategy; exports.facebookStrategy = new FacebookStrategy({ clientID: 'REPLACE_IT_WITH_CLIENT_ID', clientSecret: 'REPLACE_IT_WITH_CLIENT_SECRET', callbackURL: 'http://localhost:3000/auth/facebook/callback', passReqToCallback: true },function(req,accessToken,refreshToken,profile,done){ User.findOne({ 'facebook.id' : profile.id },function(err,user){ if(err){ done(err); } if(user){ req.login(user,function(err){ if(err){ return next(err); } return done(null,user); }); }else{ var newUser = new User(); newUser.facebook.id = profile.id; newUser.facebook.name = profile.displayName; newUser.facebook.token = profile.token; newUser.save(function(err){ if(err){ throw(err); } req.login(newUser,function(err){ if(err){ return next(err); } return done(null,newUser); }); }); } }); } ); 

在我的代码示例中,我添加了一些逻辑来保存数据库中的用户信息并保存会话中的用户详细信息。 我认为这可能对人们有帮助。

req.user提供存储在护照会话中的用户信息。