私はruby on railアプリケーションでomniauth(omniauth-facebook)を使用しています。ユーザーの都市、国、性別の情報を取得できるかどうかを確認したいと思います。そして、どのように私はキャリアウェーブ、Ruby on Rails omniauth and carrierwave
とユーザープロファイル写真を取ることができます。
私はruby on railアプリケーションでomniauth(omniauth-facebook)を使用しています。ユーザーの都市、国、性別の情報を取得できるかどうかを確認したいと思います。そして、どのように私はキャリアウェーブ、Ruby on Rails omniauth and carrierwave
とユーザープロファイル写真を取ることができます。
(Carrierwave Documentation)[https://github.com/carrierwaveuploader/carrierwave]を参考にして、キャリアモデルの機能をサポートする新しいフィールドを追加するには、ユーザーモデルを変更する必要があります。
class User < ActiveRecord::Base
mount_uploader :avatar, AvatarUploader
end
しかし、あなたは、SQL/ActiveRecordをするのではなく、MongoDBのを使用している場合、それは異なります:
は、一般的に、これは意味します。
この新しいフィールドが存在するかどうかテストするには、新しいオブジェクトをレールコンソールで初期化し、使用可能なフィールドを調べます。
bundle exec rails c
u = User.new
u.(tab twice quickly to see the available options)
# You are looking for the avatar field
u.avatar
あなたはそれをテストした後、最終的にあなたがあなたのビューでフォームフィールドに追加します
File.open('somewhere') do |f|
u.avatar = f
end
を使用して、それをテストするために、コンソールからそれを設定することができます。通常、ビューの作成/更新フォームにはCRUDがありますので、これらのフォームを変更してファイルフォーム(これは特にHTMLではなく、検索でHTMLを使用して詳細情報を参照することができます)を組み込みます。一度追加すると、対応するコントローラーを変更して、これらのコントローラー・アクションを使用して保存できるように値をホワイトリストに登録する必要があります。
このプロセスは、ユーザーモデルの初期生成後にユーザーオブジェクトに他のフィールドを追加するのと似ています。
通常omniauth、他の人は、他の人が唯一のいくつかを提供していない一部のプロバイダは、あなたがメールで与えるなどのみの認証に関係する標準答え、email
の組み合わせで基本的にハッシュ、name/first/last
、profile_picture url
、username
を返します。スコープを使って具体的に質問すると、私は私のomniauth.rb上で、次の(設定/初期化子/ *内側)を使用していますFacebookのために
は
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が最初に、私にメール、IDなどいくつかの基本的な情報を提供することを意味しますoauthの認証が成功した後、レスポンスハッシュの名前と姓(オムニバスが手配します)。それが提供するトークンは、ページを管理するためのスコープにもなりますが、私はそれに関連するフィールドを最初に要求しません。
city
、country
、そしてinfo_fields
の中の何かを尋ねるでしょう(これらのフィールドに余分なスコープは不要です)。
omniauth(基本的にはミドルウェアとして書かれたコードですが、それはあなたのためにoauth2の流れです)から応答を受け取ったら、あなた自身がそれを行うことができます。プロフィールのpic urlがあります。 あなたはその写真をダウンロードしたいと思うでしょう。 carrierwaveを使用する場合は、アップローダが設定されている列をインスタンス化してから、コントローラまたはモジュール/クラスのいずれかで行います。その後、メソッド.download!を実行します。ダウンロードする場所からそれにURLを渡す:
user.avatar = AvatarUploader.new
user.avatar.download! omniauth_hash['blabla_fields']['blabla_picture_url']
これは、あなたが正常にあなたのモデルを介してアクセスできることを、遠隔画像のURLをダウンロードして、定期的なcarrierwaveの添付ファイルとして保存されます。