2012-12-18 112 views
11

我創建了一個Meteor應用程序,允許用戶使用Facebook登錄。爲此,我使用accounts-ui和accounts-facebook軟件包。這工作正常。如何使用Meteor中的accounts-facebook獲取用戶的電子郵件地址?

如何在用戶登錄後檢索用戶的電子郵件地址?我知道這需要特別許可,所以我在Facebook開發人員網站的應用程序設置中將email添加爲「用戶&朋友的權限」。繼流星文檔,我還設置了Account.ui.config這樣的:

Accounts.ui.config({ 
    requestPermissions: { 
    facebook: ['email'], 
    }, 
    passwordSignupFields: 'USERNAME_AND_EMAIL' 
}); 

正如預期的那樣,當上使用Facebook的我的應用程序跡象用戶,它正確地請他們分享他們的電子郵件地址。但是,我如何檢索它?用戶文檔只有_idprofile.name

+0

當使用'賬戶-facebook',你並不需要配置'賬戶,ui'與權限 - 電子郵件和基本信息是默認請求的。 'passwordSignupFields'只用於普通賬戶,不適用於Facebook。 – Rahul

回答

9

Facebook用戶的電子郵件地址存儲在[userDocument].services.facebook.email中,該地址未發佈到客戶端,但可以通過服務器或客戶端使用Meteor.methodsMeteor.call進行訪問。

+2

你可以使用eg發佈服務器上的電子郵件字段。 'Meteor.publish(「facebook_email」,function(){return Meteor.users.find({_ id:this.userId},{fields:{'services.facebook.email':1}});});',注意只將該用戶的電子郵件發佈給該用戶的客戶以防止隱私問題。 – Rahul

+0

有沒有人知道獲取Facebook圖片的語法?我嘗試了以下,以及它的變體,沒有運氣:'Meteor.users.find({_ id:this.userId},{fields:{'services.facebook.picture.dur.url':1}});' – AbigailW

0

這會將Facebook配置文件信息添加到客戶端用戶對象。

Accounts.onCreateUser (options, user) ->  

    if options.profile 
     user.profile = options.profile 

     # get profile data from Facebook 
     result = Meteor.http.get "https://graph.facebook.com/me", { 
        params: access_token: user.services.facebook.accessToken} 

     if !result.error && result.data 
      #if successfully obtained facebook profile, save it off 
      #the user can access the profile object on the client 
      user.profile.facebook = result.data; 

    return user 
在服務器端的facebook.accesstoken可以訪問

...所以用它來獲得完整的FB的信息,並將其保存到客戶端的用戶對象..

平一個Meteor.user( )現在在控制檯中獲取FB信息。

不認爲這是具有客戶端FB信息方面正是最佳實踐..

+0

通過這樣做(很好的開箱即用思考,順便說一句)你繞開了流星的發佈系統,這可能不是一個好的途徑,因爲你的代碼不太可預測。請參閱JWS對流星推薦方法的回答。 – Rahul

+0

這需要被添加到Accounts-Facebook文檔中。 – steveinatorx

相關問題