對於我的應用程序(Node.js),我正在使用passport-facebook,除了我無法獲取用戶電子郵件外,一切運行良好。我在這個問題上發現了很多問題,但由於某些原因,他們沒有解決我的問題。我會很樂意提供一些幫助。所以,我的配置:無法從Facebook登錄獲取電子郵件(API版本2.8)
app.js
app.get('/auth/facebook', passport.authenticate('facebook', {scope: 'email'}));
// in scope i tried a different options like ['email'] or ['emails'] and so go on
app.get('/auth/facebook/callback',
passport.authenticate('facebook', {
successRedirect: '/',
failureRedirect: '/login'
}));
passport.js:
passport.use('facebook', new FacebookStrategy({
clientID : secret.facebook.clientID,
clientSecret : secret.facebook.clientSecret,
callbackURL : secret.facebook.callback
},
function(access_token, refreshToken, profile, done) {
console.log(profile) // here i got all profile data except email
process.nextTick(function() {
User.findOne({ 'facebook.id' : profile.id }, function(err, user) {
if (err)
return done(err);
if (user) {
return done(null, user);
} else {
var newUser = new User();
console.log(profile.email) // here i got undefined
newUser.facebook.id = profile.id;
newUser.facebook.token = access_token;
newUser.facebook.firstName = profile.name.givenName;
newUser.facebook.lastName = profile.name.familyName;
newUser.facebook.email = profile.email;
newUser.save((err) => {
if (err)
throw err;
return done(null, newUser);
});
}
});
});
}));
Facebook的secret.js
module.exports = {
facebook: {
clientID: '****',
clientSecret: '********',
callback: '/auth/facebook/callback',
profileFields: ['id', 'email']
}
}
在UserSchema
:
facebook: {
id: String,
token: String,
email: String,
name: String,
}
圖 - API
nope不工作(回調卡住,沒有返回或只是在另一個不存在的頁面上轉換,並重定向到我的默認值) –
但這部分{範圍:'電子郵件'}的作品,因爲我這樣寫{範圍:['public _profile','user_friends','email']}然後在Telerik Fiddler catch請求中HTTP/1.1 302找到 X-Powered-By:Express 位置:facebook.com/dialog/oauth?response_type=code&redirect_uri=http%3A %2F%2Flocalhost%3A8080%2Fauth%2Ffacebook%2Fcallback&scope = public_profile%2Cuser_friends%2Cemail&client_id = 422349 ...我什至不能理解,這是我的問題或一些FB配置。我完全卡住了。 –