こんにちは、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
上記の設定をして、ファイルをアップロードすると無事に保存されました。
こちらの記事を参考にされてもらいました。