2017-02-15 61 views
1

我這樣做是在解釋#1,但它沒有工作護照Facebook驗證未提供電子郵件地址

passport.use(new FacebookStrategy({ 
    clientID: 'CLIENT ID', 
    clientSecret: 'CLIENT SECRET', 
    callbackURL: "/auth/facebook/callback", 
    profileFields:['id', 'emails', 'link', 'locale', 'name', 
    'timezone', 'updated_time', 'verified', 'displayName'] 
    }, 
    function(accessToken, refreshToken, profile, done) { 
    console.log(profile); 
    var authId = 'facebook:' + profile.id; 
    for(var i = 0; i < users.length; i++){ 
     var user = users[i]; 
     if(user.authId === authId){ 
     return done(null, user); 
     } 
    } 

    var new_user = { 
     'authId':authId, 
     'displayName':profile.displayName 
    }; 
    users.push(new_user); 
    done(null, new_user); 
    } 
)); 

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

但在我的控制檯中的所有方面

_json: 
    { id: 'MY ID', 
    link: 'https://www.facebook.com/app_scoped_user_id/MY_ID/', 
    locale: 'ko_KR', 
    last_name: 'LAST_NAME', 
    first_name: 'FIRST_NAME', 
    timezone: 9, 
    updated_time: '2016-06-26T06:25:28+0000', 
    verified: true, 
    name: 'MY NAME' } } 

有沒有電子郵件字段有什麼問題? 或者我的Facebook帳戶授權有問題嗎?

回答

0

在profileFields對象中,使用'email'而不是'emails。

profileFields:['id', 'emails', 'link', 'locale', 'name', 
    'timezone', 'updated_time', 'verified', 'displayName'] 

profileFields:['id', 'email', 'link', 'locale', 'name', 
    'timezone', 'updated_time', 'verified', 'displayName'] 
+0

感謝您發表評論!但它不工作...... :(我不知道爲什麼...... !!同樣的情況 –

+0

我試過一樣,它工作,不知道什麼是錯的 –

+0

我認爲我的facebook帳戶存在一些問題授權我會檢查它。感謝您的評論:) –

0

更換試試這個:

passport.use(new FacebookStrategy({ 
    clientID: 'CLIENT ID', 
    clientSecret: 'CLIENT SECRET', 
    callbackURL: "/auth/facebook/callback", 
    profileFields:['id', 'emails', 'link', 'locale', 'name', 
    'timezone', 'updated_time', 'verified', 'displayName'] 
    }, 
    function(accessToken, refreshToken, profile, done) { 
    console.log(profile.emails[0].value); 
    var authId = 'facebook:' + profile.id; 
    for(var i = 0; i < users.length; i++){ 
     var user = users[i]; 
     if(user.authId === authId){ 
     return done(null, user); 
     } 
    } 

    var new_user = { 
     'authId':authId, 
     'displayName':profile.displayName 
    }; 
    users.push(new_user); 
    done(null, new_user); 
    } 
)); 

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