ユーザーがFacebookアカウントを使用してログインし、ID、名前、電子メールを保存するアプリケーションがあります。私はhttps://github.com/jaredhanson/passport-facebookを使用しています
UserSchema.statics.findOrCreateFaceBookUser = 関数 (プロファイル、完了) { var ユーザー = これ; User.findOne({ 「メール」: profile.emails[0].value }、関数(エラー、ユーザー){ もし (エラー) { エラーをスローします。 } もし (ユーザー) { user.facebook = { id: profile.id, 電子メール: profile.emails[0].value, 名前: profile.displayName }; user.save(関数(エラー) { もし (エラー) { 次を返します(エラー); } そうしないと { // 完了 (null、ユーザー); } }); 完了 (ヌル、ユーザー); } そうしないと { User.findOne({ 「facebook.id」: プロフィール.id }、関数(エラー、ユーザー){ もし (エラー) { エラーをスローします。 } //if (err) return done(err); もし (ユーザー) { 完了 (ヌル、ユーザー); } そうしないと { User.create({ firstName:profile.name.givenName, 姓: profile.name.familyName, 電子メール: profile.emails[0].value, 性別:プロフィール.性別、 image:"http://graph.facebook.com/"+profile.id+"/picture?type=normal", フェイスブック: { id: profile.id, 電子メール: profile.emails[0].value, 名前: profile.displayName } }、関数(エラー、ユーザー){ もし (エラー) { エラーをスローします。 } 完了 (ヌル、ユーザー); }); } }); } });
問題は、アプリケーションも使用している facebook の友達を取得する必要があることですが、facebook グラフによって返される「id」が、アプリケーションで保持しているものと一致しません。
https://graph.facebook.com/me/friends?fields=id,name&access_token=xpto
Passport-facebook で受信した「profile.id」は、facebook グラフ フィールド「id」とは異なります