Обычно omniauth возвращает стандартный ответ, касающийся только аутентификации, в основном хэш с комбинацией email
, name/first/last
, profile_picture url
, username
и т. д. Некоторые провайдеры предоставляют вам электронную почту, другие нет, третьи предоставляют только некоторые поля, если вы спросите специально для них через прицелы.
Для facebook я использую следующее в своем omniauth.rb (внутри config/initializers/*)
provider :facebook, ENV['FB_ID'], ENV['FB_SECRET'], scope: 'public_profile, email, manage_pages, user_friends', info_fields: 'id, first_name, last_name, link, email', image_size: 'large'
Это означает, что facebook предоставит мне электронное письмо, некоторую базовую информацию, такую как идентификатор, имя и фамилию, в хэше ответа (об организации которого позаботится omniauth) после успешной авторизации oauth. Токен, который он предоставит, также будет предназначен для управления страницами, хотя изначально я не прошу каких-либо полей, связанных с ним.
Таким образом, в вашем случае вы должны запросить city
, country
и что-то еще в info_fields
(двойная проверка через их обозреватель графиков, что вам не нужна дополнительная область для этих полей).
После того, как вы получите ответ через omniauth (который в основном представляет собой фрагмент кода, написанный как промежуточное программное обеспечение, которое выполняет поток oauth2 для вас — вы также можете сделать это самостоятельно), у вас будет URL-адрес изображения профиля. Вы захотите скачать эту картинку. Используя Carrwave, вы делаете это либо на своем контроллере, либо в модуле/классе, создавая экземпляр столбца, в котором у вас установлен загрузчик, а затем выполняя метод .download! передавая ему URL-адрес, откуда скачать:
user.avatar = AvatarUploader.new
user.avatar.download! omniauth_hash['blabla_fields']['blabla_picture_url']
Это загрузит URL-адрес удаленного изображения и сохранит его как обычное вложение несущей волны, к которому вы затем сможете получить доступ через свою модель в обычном режиме.
person
m3characters
schedule
07.07.2017