0

この他の質問のおかげで、スコープを修正したので、ユーザーの性別と場所をDBに保存できるように、正しい権限を要求しています。

これは、すべての情報バーの性別と場所が保存される私の user.rb コードです。auth.info.name などで設定されたプロトコルに従った後、性別や場所は保存も取得もされません。

def self.from_omniauth(auth)
    where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user|
      user.provider = auth.provider
      user.uid = auth.uid
      user.name = auth.info.name
      user.email = auth.info.email
      user.picture = auth.info.image
      user.gender = auth.info.gender
      user.country = auth.info.locale
      user.oauth_token = auth.credentials.token
      user.oauth_expires_at = Time.at(auth.credentials.expires_at)
      user.save! 
      end
     end

ここに私が送っているスコープがあります

  Rails.application.config.middleware.use OmniAuth::Builder do
  provider :youtube, YOUTUBE_KEY, YOUTUBE_SECRET, { :scope => "https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email https://gdata.youtube.com", access_type: 'offline', approval_prompt: '' }
end

ルート

match 'auth/youtube/callback', to: 'sessions#create'

これら2つの値を保存する正しい方法を知っている人はいますか?

4

1 に答える 1

2

ここでの問題は、omniauth ハッシュの間違った場所でその情報を探していることです。次のコード行をコントローラー アクションの先頭に追加すると、次のようになります。

render :text => "<pre>" + env["omniauth.auth"].to_yaml and return

OAuth プロバイダーから返されたハッシュの内容を調べて、ハッシュのキー内にあることgenderを確認できます。localeextra

したがって、ここでの答えは、問題のある 2 行を次のように変更するだけです。

user.gender = auth.extra.raw_info.gender
user.country = auth.extra.raw_info.locale
于 2013-01-18T14:44:47.427 に答える