Получение информации из Facebook OmniAuth Authentication Hash

Я новичок в Ruby и Rails, но мне удалось использовать OmniAuth для аутентификации через Facebook. Все работает нормально, я могу создавать пользователей, и они могут входить в систему через Facebook.

Проблема в том, что я хотел бы взять некоторые данные пользователя (например, адрес электронной почты, фото профиля и т. д.) и сохранить их.

Просматривая README (https://github.com/mkdynamic/omniauth-facebook), я удалось найти:

Вот пример хэша аутентификации, доступного в request.env['omniauth.auth']:

{
  :provider => 'facebook',
  :uid => '1234567',
  :info => {
    :nickname => 'jbloggs',
    :email => '[email protected]',
    :name => 'Joe Bloggs',
    :first_name => 'Joe',
    :last_name => 'Bloggs',
    :image => 'http://graph.facebook.com/1234567/picture?type=square',
    :urls => { :Facebook => 'http://www.facebook.com/jbloggs' },
    :location => 'Palo Alto, California',
    :verified => true
  }
} 

Я попытался выполнить дополнительный поиск по хэшу аутентификации и получил это, в котором перечислены некоторые сведения, которые можно получить: https://github.com/inridea/omniauth/wiki/Auth-Hash-Schema

Дело в том, что я запросил определенные разрешения. Вопрос в том, как узнать, какую информацию отправляет Facebook? К сожалению, сообщение о том, что информация находится в request.env['omniauth.auth'], не приносит мне много пользы. Как получить информацию отсюда?

Я новичок, изучаю учебник по Rails (http://ruby.railstutorial.org/), но пытаюсь создать собственное приложение методом проб и ошибок.


person Victor    schedule 02.04.2012    source источник


Ответы (1)


request.env['omniauth.auth'] даст вам хэш. Проверьте документы Ruby, чтобы узнать, что вы можете делать с хэшем.

http://ruby-doc.org/core-1.9.3/Hash.html

Для любых элементов, которые не всегда будут там, вы можете просто проверить blank? (метод удобства Rails), например.

omniauth = request.env['omniauth.auth']
unless omniauth['info']['email'].blank?
  send_spam omniauth['info']['email'] # ;)
end

Вам, вероятно, будет полезен следующий скринкаст, если вы его еще не видели:

http://railscasts.com/episodes/235-omniauth-part-1

person Mark Fraser    schedule 02.04.2012
comment
Спасибо. Просмотр этого рельсового вещания показал, как извлекать информацию. - person Victor; 03.04.2012
comment
Один вопрос. Я не уверен, что это должно быть в новом вопросе, но после извлечения данных из хэша аутентификации у некоторых есть дубликаты. Например, у пользователя может быть несколько работодателей. Как мне справиться с этим? Меня интересует только последний работодатель. - person Victor; 03.04.2012
comment
Мне нужно увидеть данные. Хэши обычно неупорядочены. Это дает вам даты? - person Mark Fraser; 03.04.2012
comment
Я не могу правильно передать хеш. Возможно, я опубликую другой вопрос. Спасибо за ответ! :D - person Victor; 03.04.2012
comment
Говоря о хеш-схеме, откуда взялся ключ omniauth.auth? - person von spotz; 30.05.2021