2011-08-12 26 views
4

Facebook、Twitter、Google経由の認証にOmniauthを使用して新しいRails 3アプリを開始します。私はFacebookやTwitterからユーザーのアバターを簡単に手に入れることができますが、存在していればGoogleから検索する方法は見つけられません。Omniauth on Rails 3を使用したGoogleプロフィール画像の取得

ここで私は、認証のハッシュを構築するために使用するコードです:TwitterやFacebook上で

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] = '' 

提供されていない場合、この次の行はデフォルトにアバターやセットを取得します。

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

このdoesnのは、 Googleで仕事をしていて、その文書を見つけることができませんでした。

アイデア?

ありがとうございます!状態をコミットする

+2

Omniauthのドキュメンテーションから:「Googleは、認証と認証を分離しておくことについて非常に厳格です。彼らは私が見つけることができるユーザーのプロフィールを直接取得するエンドポイントを与えません。連絡先フィードから名前とメールを取得できます。しかしながら。"だから私はそれをすることができないように見える。たぶん、Google +の統合だけです。 – rapcal

答えて

7

お試しください] OmniauthグーグルのOAuth2戦略 ':

返し名、FIRST_NAME、LAST_NAME、画像、との情報で電子メール:範囲=> 'userinfo.email、userinfo.profile'

あなたはコミットhere

+0

あなたの答えをありがとう!残念ながら、私はこのプロジェクトでGoogleのログインサポートを断念しましたので、Omniauthがプロファイル写真を入手できるかどうかはテストできません。それで、私はあなたの答えを正しいものとして受け入れることができませんが、私はそれをupvotedしました。再度、感謝します! – rapcal

+1

心配はいりません。どんな解決策を求めても幸いです。 –

2

私はそれはあなたの使って何のバージョンに依存想像かかわらはいあなたは、画像を得ることができますを表示することができます。

> 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) 

RVM現在 ルビー-1.9.3-P194を使用して

イムは、私がアクセスへの命名規則に起因したさまざまな理由でここに到着しましたプロフィールのプロパティは、さまざまなチュートリアルで説明されているものとは異なっていました。サインインを完了する際にエラーが発生していました。あなたの質問では、同じ問題が発生することがあります。

問題は、GoogleのFB、Twitterなどとは異なるプロパティ名があるため、そのことを考慮する必要があります。

プロパティを見つけるために、私はやっていることをコメントし、ちょうど応答を投げ捨てました。そのようです。

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

これは、Googleのプロファイルの詳細を出力します。これはうまくいけば次のようになります。

--- !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ログインサポートを断念しました。そのため、回答をテストしたり、正しいものとして受け入れることはできません。しかし、私はそれをupvotedしており、私はあなたが返信する時間がかかったことに心から感謝しています。ではごきげんよう! – rapcal

+1

問題ありません。私は文字通りomniauthのチュートリアルを完了しました(最新バージョンのものはすべて古くなっています)。だから誰でもこれを読んで、本質的に彼らがあなたの質問を見たら彼らが探していた答えを得るでしょう。または、画像がプロファイル画像でない場合は、少なくとも1ステップ近づけることができます(同様に、どちらも試していません)。 – Emile

0

私は同じ問題を抱えていて、プロファイルの画像が公開されていないことが分かりました。 「私は誰とでも見ることができます」から「誰とでも見ることができる人にのみ表示」の設定を変更する必要がありました。その後、画像が表示され始めました。これが誰かを助けることを望みます。

関連する問題