Получение изображения профиля Google с помощью Omniauth on Rails 3 - PullRequest
4 голосов
/ 12 августа 2011

Я запускаю новое приложение Rails 3, используя Omniauth для аутентификации через Facebook, Twitter и Google. Я легко могу получить аватар пользователя из Facebook и Twitter, но не могу найти способ извлечь его из Google, если он существует.

Вот код, который я использую для создания хэша аутентификации:

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'

Это не работает в Google, и я не смог найти никакой документации по этому вопросу.

Есть идеи?

Большое спасибо!

Ответы [ 3 ]

7 голосов
/ 09 декабря 2011

Попробуйте 'Omniauth Google OAuth2 Strategy', в которой коммит гласит:

Возвращает имя, имя, фамилию, изображение, адрес электронной почты в информации с помощью: scope => 'userinfo.email, userinfo.profile'

Вы можете просмотреть коммит здесь

2 голосов
/ 17 августа 2012

Да, вы можете получить картину, хотя я думаю, что это зависит от того, какие версии вы используете.

я использую

rvm current ruby-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)

Я прибыл сюда по другой причине, которая была связана сДело в том, что соглашение об именах для доступа к свойствам профиля отличалось от того, которое объясняется в различных руководствах, поэтому я обнаружил ошибку при завершении входа в систему. На самом деле в вашем вопросе вы можете обнаружить, что у вас будут такие же проблемы.1011 * Проблема в том, что у 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 и вместо этого 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 голосов
/ 29 декабря 2013

У меня возникла та же проблема, и я обнаружил, что просто изображение профиля не было общедоступнымМне пришлось изменить настройки с «Видимо только для людей, с которыми я могу общаться» на «Видимо всем».Затем изображение начало появляться.Надеюсь, это кому-нибудь поможет.

...