56

Passport-Facebook認証を使用しています。

  Passport.use(new FacebookStrategy({
            clientID: 'CLIENT_ID',
            clientSecret: 'CLIENT_SECRET',
            callbackURL: "http://www.example.com/auth/facebook/callback"
        }、
        関数 (accessToken、refreshToken、プロファイル、完了) {            
            process.nextTick(関数 () {                
               console.log(プロファイル)
            });               
        }
    ));

一部の Facebook アカウントでは、email_id を取得できず、以下のようなスコープ変数を使用して試してみましたが、それでも email_id を取得できません。

profileUrl : " " および ProfileFields : ['','']

4

7 に答える 7

132

次の 2 つがコードに含まれていることを確認してください。

  passport.use(new FacebookStrategy({
            clientID: 'CLIENT_ID',
            clientSecret: 'CLIENT_SECRET',
            callbackURL: "http://www.example.com/auth/facebook/callback"
            passReqToCallback : true,
            profileFields: ['id', 'emails', 'name'] //This
        },

この:

app.get('/connect/facebook', passport.authorize('facebook', { scope : ['email'] }));

これにより、以下にアクセスできます。

  • profile.id
  • profile.name.givenName
  • profile.name.familyName
  • profile.emails

最後の 1 つは配列であるためprofile.emails[0].value、ユーザーの最初の電子メール アドレスを取得するために使用します。

shamim reza指摘したように、ユーザーが確認済みの電子メール アドレスを少なくとも 1 つ持っている場合にのみプロパティが存在するため、確認する必要がprofile.emails !== undefinedある場合があります。

Weft指摘したように、の代わりにプロパティを使用する必要がある場合がありemailますemails

于 2015-09-03T08:37:31.143 に答える
25

認証するときは、これに似たものを使用します。認証時に、スコープに add 'email' を使用する必要があります。

app.get('/auth/facebook',
passport.authenticate('facebook', { scope: ['email']}),
    function(req, res){
});

それは私のために働いています。

ここに私を助けたいくつかのリンクがあります。

https://github.com/jaredhanson/passport-facebook/issues/11 https://github.com/jaredhanson/passport-facebook#how-do-i-ask-a-user-for-additional-permissions

于 2014-07-18T00:54:43.980 に答える