【Ruby on Rails】deviseのomniauthのTwitter認証を使ってログインしたときにプロフィール画像をする方法

こんにちは、nishi_talk(@nishi_talk)です。
今回はdeviseのomniauthのTwitter認証を使ってログインしたときにプロフィール画像をする方法をご紹介します。




deviseを使ってomniauth認証の設定方法はこちらの記事で紹介してます。

【Ruby on Rails】deviseを使ってtwitterのOmniAuthを実装する方法

Twitterのプロフィール画像をデータベースに保存する設定をしたのですが、なぜか保存されず。
Twitterのデータは取得できているのに、保存するために送信されているparamの値を確認すると、なぜかプロフィール画像の値がNillに。



対処した方法

プロフィール画像を保存するときに、CarrierWaveを使っていたのですが、アップローダをマウントした場合にメゾットを変更する必要があるみたいです。
例えばuser.imageにアップローダをマウントした場合はuser.remote_image_urlに変更します。
remote_image_urlのメソッドで値を代入すると、代入されたURLから画像を取得し、アップローダで処理してくれます。

紹介した記事のapp/model/user.rbの以下の箇所を変更します。

class User < ApplicationRecord
・
・
・
  def self.find_for_oauth(auth)
    user = User.where(uid: auth.uid, provider: auth.provider).first
 
    unless user
      user = User.create(
        uid:      auth.uid,
        provider: auth.provider,
        email:    User.dummy_email(auth),
        password: Devise.friendly_token[0, 20],
        # image: auth.info.image,              ←ここをコメントアウト
        remote_image_url: auth.info.image,     ←ここを追記
        name: auth.info.name,
        nickname: auth.info.nickname,
        location: auth.info.location
        )
    end
 
    user
  end
 
  private
 
  def self.dummy_email(auth)
    "#{auth.uid}-#{auth.provider}@example.com"
  end
end

上記の設定をして、ファイルをアップロードすると無事に保存されました。

こちらの記事を参考にされてもらいました。

CarrierWaveでURLから画像を保存、アップロードする方法 – ぷれすとぶろぐ