ExpressJS に Passport ミドルウェアを使用していますが、passport-local 戦略とパスポート-facebook 戦略の両方を一緒に使用する方法が見つかりません。ユーザーが自分のサイトでアカウントを作成し、必要に応じて Facebook にログインできるように設定して、サイトを使用している友達を確認できるようにしたいと考えています。ただし、facebook api データが返されたときにログインしているユーザーが何であるかはわかりません。
誰かがアカウントを作成すると、そのデータ (ユーザー名、電子メールなど) がデータベースに保存されます。その後、Facebook にログインしたら、データベースとセッションを更新して、Facebook API から返された情報の一部 (facebookID、AccessToken など) を含めたいと思います。これはどのように達成できますか?
返された Facebook データにアクセスするために使用できるコードを次に示します。ただし、User.findOne の行は、データベース エントリが以前に facebook と同期されている場合にのみ機能します。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);
});
}
));