2016-06-21 91 views
1

我有一個Rails應用程序,用戶可以通過Facebook登錄oauth。Rails:facebook oauth:獲取用戶個人資料鏈接

我檢索他們的圖像,電子郵件和名稱。我想要做的是取消他們的個人資料鏈接(http://facebook.com/name),性別(男性,女性,其他)

,但它不爲鏈接和性別的工作,這是我的集成:

的Gemfile

gem 'omniauth-facebook' 

User.rb模式

def self.from_omniauth(auth) 
     where(provider: auth.provider, uid: auth.uid).first_or_create do |user| 
     user.email = auth.info.email 
     user.password = Devise.friendly_token[0,20] 
     user.name = auth.info.name # assuming the user model has a name 
     user.image = auth.info.image # assuming the user model has an image 
     user.gender = auth.info.gender # assuming the user model has a gender 
     user.link = auth.info.link # assuming the user modal has a link 
     end 
    end 

    def self.new_with_session(params, session) 
    super.tap do |user| 
     if data = session["devise.facebook_data"] && session["devise.facebook_data"]["extra"]["raw_info"] 
     user.email = data["email"] if user.email.blank? 
     end 
    end 
    end 

編輯

devise.rb

config.omniauth :facebook, "***", "***" 

但對於 '零'

任何想法我可能會錯過所有的用戶,性別和鏈接的回報嗎?

感謝

+0

嘗試檢查認證後由omniauth返回的'auth' hash的值ñ。看看散列是否有返回的值。如果沒有,那將是因爲該特定用戶的隱私設置。 – Alfie

+0

它返回零,但我嘗試了一個完全打開的配置文件,哈希也是零。但我認爲鏈接價值是公衆形象的一部分,這意味着它不能被用戶隱藏......無論他的個人資料多麼私密。 – zacchj

+0

您是否檢查auth散列返回?它的結構以及如何存在其他字段等。 – Alfie

回答

0

您需要指定您希望在指定的配置提供商/初始化/ devise.rb

即獲得範圍和領域:

config.omniauth :facebook, 'APP_ID', 'APP_SECRET', {scope: 'email', info_fields: 'email,name,verified,gender,url'} 

與否Facebook會給你所要求的所有數據是一個不同的問題。

+0

我很困惑,我用devise.rb文件編輯了我的答案,而且我沒有提供任何分數和字段。我仍然收到電子郵件和名字... – zacchj

+0

這是「範圍」而不是「得分」。即使您沒有指定它們,Facebook可能會默認給予您一些字段(儘管如果明天發生更改,指定它們也是很好的做法)。除非您確實指定了某些字段,否則您無法獲得這些字段 –

+0

好吧我會研究它。謝謝大衛! – zacchj

相關問題