Ruby on RailsでTwitter認証後、別のデータベースにある内容を入力させたいです。
現状ではDevise+OmniAuthでユーザ認証を実装する手順を参考に作成しています。
これを元に、Twitter認証後に初めての場合や認証のみ行われていて内容が空の場合には入力ページにリダイレクトしてuserdetailの内容を入力させたいです。どのようにすればできるのでしょうか。リダイレクト先の入力フォームなどは作成できます。
該当のソースコード
Ruby
1class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController 2 3 def twitter 4 callback_from :twitter 5 end 6 7 private 8 9 def callback_from(provider) 10 provider = provider.to_s 11 12 @user = User.find_for_oauth(request.env['omniauth.auth']) 13 14 if @user.persisted? 15 flash[:notice] = I18n.t('devise.omniauth_callbacks.success', kind: provider.capitalize) 16 sign_in_and_redirect @user, event: :authentication 17 else 18 session["devise.#{provider}_data"] = request.env['omniauth.auth'] 19 redirect_to new_user_registration_url 20 end 21 end 22 end
Ruby
1class User < ApplicationRecord 2 devise :database_authenticatable, :registerable, 3 :recoverable, :rememberable, :trackable, :validatable, :omniauthable 4 5 has_many :contents 6 7 def self.find_for_oauth(auth) 8 user = User.where(uid: auth.uid, provider: auth.provider).first 9 10 unless user then 11 user = User.create( 12 uid: auth.uid, 13 provider: auth.provider, 14 email: User.dummy_email(auth), 15 username: auth.info.nickname, 16 password: Devise.friendly_token[0, 20] 17 ) 18 end 19 user 20 end 21 22 private 23 24 def self.dummy_email(auth) 25 "#{auth.uid}-#{auth.provider}@example.com" 26 end 27end 28
あなたの回答
tips
プレビュー