前提・実現したいこと
現在Ruby on Railsで開発をしているフレームワーク初心者です。
Ruby on RailsでDevise + omniauth-slackを使ってoauth認証でアカウント登録、ログインができる機能を作リました。Slackのユーザーネームと画像をそのままアカウントの情報として登録がしたいです。
画像のアップロードにcarrierwaveを使っています。設定はデフォルトのままです。
発生している問題・エラーメッセージ
コールバック時の処理でユーザーネームと画像を送られてきたデータの中から取り出しアカウント登録をしているのですが、画像のURlのみDBに入ってくれません。コールバック時ではエラーはなく、その後もアカウントが登録ができてしまっている状況です。
該当のソースコード
Ruby
1#deviseのモデル 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 8 9 acts_as_taggable 10 has_many :requests 11 mount_uploader :image, ImageUploader 12 13 def self.find_for_oauth(auth) 14 user = User.where(uid: auth.uid, provider: auth.provider).first 15 unless user 16 user = User.create( 17 name: auth.extra.user_info.user.profile["real_name_normalized"], 18 image: auth.extra.user_info.user.profile["image_original"], 19 uid: auth.uid, 20 provider: auth.provider, 21 email: User.dummy_email(auth), 22 password: Devise.friendly_token[0, 20] 23 ) 24 end 25 26 user 27 end 28 29 private 30 31 def self.dummy_email(auth) 32 "#{auth.uid}-#{auth.provider}@example.com" 33 end 34
Ruby
1#コールバック時のコントローラ 2class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController 3 def slack 4 callback_from :slack 5 end 6 7 private 8 9 def after_sign_in_path_for(resource) 10 root_path 11 end 12 13 def callback_from(provider) 14 provider = provider.to_s 15 @user = User.find_for_oauth(request.env['omniauth.auth']) 16 17 if @user.persisted? 18 flash[:notice] = I18n.t('devise.omniauth_callbacks.success', kind: provider.capitalize) 19 sign_in_and_redirect @user, event: :authentication 20 else 21 session["devise.#{provider}_data"] = request.env['omniauth.auth'] 22 redirect_to new_user_registration_url 23 end 24 end 25end
試したこと
deviseだけでアカウント登録をしてみましたがちゃんとカラムに画像のURlが保存されました。
補足情報(FW/ツールのバージョンなど)
Ruby on Rails 5.2.2.1
Mysql
あなたの回答
tips
プレビュー