deviseでログイン機能を実装したアプリの制作中にomniauth-twitterを使用したTwitter認証時に画像を取得したいのですがどうしてもうまくいきません。
ruby
1#user.rb 2class User < ApplicationRecord 3 # Include default devise modules. Others available are: 4 # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable 5 devise :database_authenticatable, :registerable, 6 :recoverable, :rememberable, :validatable, 7 :omniauthable, omniauth_providers:[:twitter] 8 9 mount_uploader :profile_image, ImageUploader 10~省略 11 def self.from_omniauth(auth) 12 find_or_create_by(provider: auth["provider"], uid: auth["uid"]) do |user| 13 user.provider = auth["provider"] 14 user.uid = auth["uid"] 15 user.username = auth["info"]["nickname"] 16 user.remote_profile_image_url = auth["info"]["image"] 17 puts user.remote_profile_image_url 18 user.twitter_url = auth["info"]["urls"]["Twitter"] 19 end 20 end
ruby
1image_uploader.rb 2class ImageUploader < CarrierWave::Uploader::Base 3 4 # Choose what kind of storage to use for this uploader: 5 storage :file 6 # storage :fog 7 8 # Override the directory where uploaded files will be stored. 9 # This is a sensible default for uploaders that are meant to be mounted: 10 def store_dir 11 "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 12 end 13 14 # Provide a default URL as a default if there hasn't been a file uploaded: 15 def default_url(*args) 16 # For Rails 3.1+ asset pipeline compatibility: 17 ActionController::Base.helpers.asset_path("fallback/" + [version_name, "no-image.png"].compact.join('_')) 18 19 # "/images/fallback/" + [version_name, "default.png"].compact.join('_') 20 end 21 22 23end 24
このコードだとprofile_imageにはnilが帰ってきます
画像はpublic/uploads/tmp/長い数字/画像ファイルという感じで配置されます
参考記事
Carrierwaveでアップロードされたファイルはpublic/uploads/user/profile_image/user.id/画像ファイルというように配置されます。
何卒よろしくお願いいたします。
あなたの回答
tips
プレビュー