Passport-Facebook authentication is not providing email for all Facebook accounts

前端 未结 7 946
忘了有多久
忘了有多久 2020-12-07 20:16

I am using Passport-Facebook authentication.

  passport.use(new FacebookStrategy({
            clientID: \'CLIENT_ID\',
            clientSecret: \'CLIENT_SECRET\         


        
7条回答
  •  爱一瞬间的悲伤
    2020-12-07 21:00

    Make sure these two things are in your code:

      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
            },
    

    and this:

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

    This gives you access to the following:

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

    The last one being an array, so use profile.emails[0].value to get the first email address of the user.

    As shamim reza pointed out, you might want to check if profile.emails !== undefined because the property only exists if the user has at least one verified email address.

    As Weft pointed out, you might have to use the property email instead of emails.

提交回复
热议问题