2011-08-12 68 views
4

我開始使用Omniauth通過Facebook,Twitter和Google進行身份驗證的新Rails 3應用程序。我可以很容易地從Facebook和Twitter獲取用戶的頭像,但如果存在,卻無法找到從Google檢索的方式。使用Omniauth on Rails檢索Google個人資料圖片3

下面是我用它來構建認證哈希代碼:

omniauth['user_info']['email'] ? @authhash[:email] = omniauth['user_info']['email'] : @authhash[:email] = '' 
omniauth['user_info']['name'] ? @authhash[:name] = omniauth['user_info']['name'] : @authhash[:name] = '' 
omniauth['uid'] ? @authhash[:uid] = omniauth['uid'].to_s : @authhash[:uid] = '' 
omniauth['provider'] ? @authhash[:provider] = omniauth['provider'] : @authhash[:provider] = '' 

在Twitter和Facebook這下一行獲得的化身或設置爲默認值,如果不提供:

omniauth['user_info']['image'] ? @authhash[:image] = omniauth['user_info']['image'] : @authhash[:image] = 'avatar.jpg' 

這並未在谷歌上工作,我找不到任何文件。

任何想法?

非常感謝!

+2

來自Omniauth文檔:「Google對於保持授權和認證是非常嚴格的,它們沒有端點直接獲取用戶的個人資料,我們可以*從聯繫人提要中獲取他們的姓名和電子郵件,然而。」所以看起來我無法做到這一點。也許只有使用Google+集成。 – rapcal

回答

7

嘗試 'Omniauth谷歌的OAuth2戰略',其中承諾規定:

返回一個名字,名字,姓氏,圖像,與信息的電子郵件:範圍=> 'userinfo.email,userinfo.profile'

您可以查看提交here

+0

感謝您的回答!不幸的是,我已經放棄了此項目的Google登錄支持,所以我現在無法測試Omniauth是否能夠獲取個人資料照片。因此,我無法接受你的回答是正確的,但我已經投了贊成票。再次感謝! – rapcal

+1

不用擔心。祝你好運,無論你追求什麼解決方案。 –

2

是你可以得到的圖片,但我會想象這取決於你使用的是什麼版本上。

使用im

RVM當前 紅寶石1.9.3-P194

> gem list 
oauth (0.4.6) 
oauth2 (0.8.0) 
omniauth (1.1.0, 1.0.3) 
omniauth-facebook (1.4.1, 1.4.0) 
omniauth-google (1.0.1) 
omniauth-google-oauth2 (0.1.13) 
omniauth-oauth (1.0.1) 
omniauth-oauth2 (1.1.0, 1.0.3) 
omniauth-twitter (0.0.12) 

我來到這裏出於不同的原因,這是由於該命名約定訪問配置文件屬性與各種教程中的配置屬性不同,因此我在完成登錄時遇到錯誤。實際上,在您的問題中,您可能會發現您將遇到同樣的問題。

問題是,谷歌有不同的財產名稱從FB,Twitter等,所以你必須考慮到這一點。

爲了找到我註釋掉的位的屬性,並且只是將響應丟棄了。像這樣。

elsif service_route == 'google_oauth2' 
render :text => omniauth.to_yaml 
return 

這將輸出您的谷歌配置文件的細節,希望看起來像下面這樣。

--- !ruby/hash:OmniAuth::AuthHash 
provider: google_oauth2 
uid: '1234567' 
info: !ruby/hash:OmniAuth::AuthHash::InfoHash 
    name: Your Name 
    email: yourEmail 
    first_name: firstname 
    last_name: surname 
    image: https://animage 
credentials: !ruby/hash:Hashie::Mash 
    token: aToken 
    expires_at: 123 
    expires: true 
extra: !ruby/hash:Hashie::Mash 
    raw_info: !ruby/hash:Hashie::Mash 
    id: '123456' 
    email: YourEmail 
    verified_email: true 
    name: YourName 
    given_name: Name 
    family_name: surname 
    link: https://plus.google.com/blah 
    picture: https://lh6.googleusercontent.com/blah blah 
    gender: male 
    birthday: '' 
    locale: en-GB 

正如你所看到的參數名稱不同,擺脫USER_INFO,而是有信息

您還會注意到,你有圖片:圖像:所以雖然我沒有嘗試這樣做我會假設,這是你的個人資料圖片。

elsif service_route == 'google_oauth2' 
    omniauth['info']['email'] ? email = omniauth['info']['email'] : email = '' 
    omniauth['info']['name'] ? name = omniauth['info']['name'] : name = '' 
    omniauth['uid'] ? uid = omniauth['uid'] : uid = '' 
    omniauth['provider'] ? provider = omniauth['provider'] : provider = '' 
    omniauth['info']['image'] ? image = omniauth['info']['image'] : image = '' 
+0

感謝您的回答!不幸的是,正如我在前面的回答中所述,我已經放棄了Google登錄支持這個項目,所以我將無法測試您的答案,也不能接受它是正確的。儘管如此,我還是贊成這一做法,並衷心感謝您花時間回覆。祝一切順利! – rapcal

+1

沒問題。我真的只是完成了omniauth教程(所有這些教程都過時了最新版本),並且必須解決上述問題才能使其工作。所以,任何閱讀本文的人都會基本上得到他們在看到你的問題時會尋找的答案。或者,如果圖像不是配置文件圖像,至少要更近一步(同樣,我還沒有嘗試過)。 – Emile

0

我有同樣的問題,發現只是該配置文件的圖像不公開。我必須將設置從「僅可看到我可以聊天的人」改爲「可見所有人」。然後圖像開始出現。希望這可以幫助某人。

相關問題