Normalerweise omniauth wird eine Standard-Antwort zurück, die nur mit Authentifizierung, im Grunde einen Hash mit einer Kombination aus email
, name/first/last
, profile_picture url
, username
usw. Einige Anbieter geben Sie eine E-Mail, andere nicht, einige andere nur betrifft liefern Felder, wenn Sie durch Bereiche speziell nach ihnen fragen.
Für facebook ich folgendes auf meinem omniauth.rb mit (innen 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'
Das bedeutet, dass Facebook mir eine E-Mail zur Verfügung stellen wird, einige grundlegende Informationen wie ID, zuerst Name und Nachname auf dem Response-Hash (das omniauth kümmert sich um das Arrangieren) nach erfolgreicher Oauth-Autorisierung. Das Token, das es zur Verfügung stellt, wird auch für die Verwaltung von Seiten verwendet, obwohl ich zunächst kein Feld dazu benötige.
Also in Ihrem Fall würden Sie nach city
, country
und was auch immer in info_fields
fragen (doppelte Überprüfung durch ihre Grafik-Explorer, dass Sie keinen zusätzlichen Bereich für diese Felder benötigen).
Nachdem Sie die Antwort durch omniauth erhalten haben (was im Grunde genommen ein Stück Code ist, das als Middleware geschrieben ist, das ist der oauth2-Fluss für Sie - Sie könnten es auch selbst machen), haben Sie eine Profilbild-URL. Sie möchten dieses Bild herunterladen. Mit carrierwave tun Sie dies entweder auf Ihrem Controller oder Modul/Klasse durch Instanziieren der Spalte, in der Sie den Uploader gesetzt haben und dann die Methode .download!es die URL von vorbei, wo zum Download:
user.avatar = AvatarUploader.new
user.avatar.download! omniauth_hash['blabla_fields']['blabla_picture_url']
Dies wird eine Remote-Bild-URL herunterladen und als regulärer carrierwave Anhang speichern, dass Sie dann durch Ihr Modell normalerweise zugreifen können.