在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的第一个参数
我回答得太晚,但我认为我的解决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提供存储在护照会话中的用户信息。
- 新用户注册后立即进行Passport身份validation
- 将护照openID-stategy与智威汤逊结合在一起
- CORS问题从React应用程序>节点服务器>redirect到Google OAuth2身份validation发出AJAX请求
- NodeJS – 使用Active Directory进行身份validation
- 我们如何在Web应用程序中进行身份validation?
- Node.jsauthentication没有护照:是json的networking令牌可靠吗?
- 在iOS / Node应用程序中使用google / twitter / linkedInauthentication
- 与节点的代理http请求
- 我使用auth0进行用户身份validation,并且我有一个针对CRUDpost(title,img,desc)的API。 如何进行CRUD API的authentication调用?