2015-07-07 14 views
18

Trong ứng dụng của tôi đăng ký facebook-strategie như sau: Nhưng hồ sơ cá nhân trở lại không chứa các email-lĩnh vực ....Passport-Facebook không cung cấp email ngay cả khi nó đang ở trong phạm vi

passport.use(new FacebookStrategy({ 
     clientID: config.facebook.clientID, 
     clientSecret: config.facebook.clientSecret, 
     callbackURL: config.facebook.callbackURL, 
     passReqToCallback: true 
    }, 
    function(req, accessToken, refreshToken, profile, done) { 
     // No email in the following colsole.log 
     console.log(JSON.stringify(profile)); 
    })); 

các get là như sau:

app.get('/oauth/facebook', passport.authenticate('facebook', { 
    failureRedirect: '/login', 
    scope:['email'] 
})); 

(vì vậy, tôi đang sử dụng phạm vi như đã nói ở đây: Passport-facebook doesn't get email)

Trên iam FB-trang Đăng nhập thậm chí hỏi cho email và tôi làm p rovide it: enter image description here

Mọi trợ giúp đều rất được đánh giá cao!

+0

Bạn cần phải hỏi cho trường email cũng – WizKid

+0

Làm thế nào để tôi làm điều này? Tôi nghĩ tôi làm điều này với phạm vi 'phạm vi: ['email']' – Rentrop

+0

: ['email'] là những quyền mà bạn muốn. Khi bạn gọi/tôi, bạn cần phải làm/me? Fields = email – WizKid

Trả lời

58

Từ biểu đồ Facebook APIv2.4, chúng tôi cần xác định rõ các trường cần nhận.

Introducing Graph API v2.4

Vì vậy, chúng ta có thể viết như sau:

passport.use(new FacebookStrategy({ 
     clientID: config.facebook.clientID, 
     clientSecret: config.facebook.clientSecret, 
     callbackURL: config.facebook.callbackURL, 
     profileFields: ['id', 'email', 'gender', 'link', 'locale', 'name', 'timezone', 'updated_time', 'verified'], 
    }, 
+5

Tôi ngạc nhiên khi điều này không được đề cập trong tài liệu chính thức của hộ chiếu.js. – kmansoor

+1

Ugh! Điều này không được đề cập trong tài liệu của plugin. – Green

1

Bạn không có phần callback của mã, phải không ?:

app.get('/oauth/facebook/callback', passport.authenticate('facebook', { 
    failureRedirect: '/login', 
    successRedirect: '/', 
    scope:['email'] 
})); 

Và, vâng, thực sự, điều này sẽ được thực hiện với sự scope:['email'], theo hướng dẫn từ liên kết của bạn và điều này một here also.

+0

Có, tôi cũng có email trên cuộc gọi lại ... Đây là điều lạ – Rentrop

Các vấn đề liên quan