7

私はOmniAuthを使用しており、Facebook経由でログインした後、次のようなomniauth.authキーを取得します。

user_info: 
  name: Tim Sullivan
  urls: 
    Facebook: http://www.facebook.com/...
    Website: 
  nickname: ...
  last_name: Sullivan
  first_name: Tim
uid: "123456789"
credentials: 
  token: [some token]
extra: 
  user_hash: 
    name: Tim Sullivan
    timezone: -5
    gender: male
    id: "123456789"
    last_name: Sullivan
    updated_time: 2010-12-30T00:52:39+0000
    verified: true
    locale: en_US
    link: http://www.facebook.com/...
    email: tim@myemailaddress.com
    first_name: Tim
provider: facebook

さて、ドキュメントによるとuser_info、電子メールはセクションにあるはずですが、そうではありません。ただし、このextra/user_hashセクションにあります。私はストリッピングしているのでextra、それは保存されていません、それで後でパイプを下って私は問題を抱えています。自分で追加することもできますが、そもそもなぜそこにないのかは説明できません。

なぜメールがuser_infoセクションに入れられないのですか?バグ?文書化されていない変更?

4

6 に答える 6

3

へ移動

email = omniauth["extra"]["raw_info"]["email"]
于 2012-07-02T18:30:07.957 に答える
2

ハッシュ「info」には、ユーザーのすべての情報が含まれています。

email = omniauth["info"]["email"]
于 2012-07-27T22:08:20.917 に答える
1

ドキュメントは最新ではないと思います。私は通常、それを削除する前に余分なハッシュからそれを取得します。

email = omniauth["extra"]["user_hash"]["email"]
于 2011-03-02T12:49:26.383 に答える
0

情報が含まれているomniauth["info"]はずですが、Facebookのバグ/(機能?)にリンクされている電子メールでFacebookがエラーを出しているようです。そのため、このハッシュで断続的なエラーが発生し、電子メールが存在しないため、すべてが壊れます。

多くのデバッグを行った後、コードを壊さないための最も安全な方法は、コアラまたは単にRESTを使用してFB APIを呼び出し、必要なomniauth["info"]情報が含まれていない場合はログインに必要な情報を取得することです。

于 2014-01-02T18:14:03.630 に答える
0

FB JSDKでomniauthを使用していますが、FB.login()に「スコープ」オプションが必要であるという事実を見落としていたため、メールを返すことができませんでした。

 FB.login(function(response) {
   // handle the response
 }, {scope: 'email,user_likes'});

optsを追加した後(スコープがサーバーに設定されていても)、すべてが修正されました。

https://developers.facebook.com/docs/reference/javascript/FB.login/v2.2#permissions

于 2014-12-12T01:02:29.790 に答える
0

JavaScriptではなくRailsを使用しているため(別の人が回答しましたがJS用)、デフォルトではないため、情報フィールドハッシュから返される電子メールを具体的に要求する必要があります。これは、config / initializers/omniauth.rbファイルで次のように設定します。

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, Rails.application.secrets.omniauth_provider_key, Rails.application.secrets.omniauth_provider_secret,
  :scope => 'email', :display => 'popup', :info_fields => 'name,email'
end

この情報は、omniauth-facebookgemのGitHubreadmeの「構成」セクションの最後に隠されています。

于 2015-09-21T23:37:31.327 に答える