我使用 ExpressJS 的 Passport 中间件,但我找不到同时使用 passport-local 策略和 passport-facebook 策略的方法。我想设置它,以便用户在我的网站上创建一个帐户,然后,如果他们愿意,他们可以登录 facebook,这样你就可以看到你的朋友也在使用该网站。但是,当返回 facebook api 数据时,我不知道登录用户是什么。
当有人创建帐户时,他们的数据(用户名、电子邮件等)存储在数据库中。当他们随后登录 facebook 时,我只想更新数据库和会话,以现在包含 Facebook API 返回的一些信息(facebookID、AccessToken 等)。如何做到这一点?
这是我可以用来访问返回的 facebook 数据的代码。仅当数据库条目之前已经与 facebook 同步时,User.findOne 行才有效。有什么方法可以传递 req.session 数据来识别当前登录的用户是什么并更新他们的个人资料?
passport.use(new FacebookStrategy({
clientID: FACEBOOK_APP_ID,
clientSecret: FACEBOOK_APP_SECRET,
callbackURL: "http://localhost:3000/auth/facebook/callback",
//callbackURL: "http://localhost:3000"
profileFields: ['id', 'displayName']
},
function(accessToken, refreshToken, profile, done) {
User.findOne({facebookID: profile.id}, function(err, user) {
if (err) { return done(err); }
user.facebookID = profile.id;
user.facebookToken = accessToken;
user.save();
return done(null, user);
});
}
));