railsアプリにtwitter-omniauthを実装しております。
twitter連携し登録ボタンを押すと、user登録(DBに入る)はされるのですがその後sign_in_and_redirect @user
の箇所でエラーが起きます
#Users::OmniauthCallbacksController.rb def twitter callback_from :twitter end private def callback_from(provider) provider = provider.to_s @user = User.find_for_oauth(request.env['omniauth.auth']) if @performer.persisted? flash[:notice] = I18n.t('devise.omniauth_callbacks.success', kind: provider.capitalize) sign_in_and_redirect @user else @user.skip_confirmation! @user.save! sign_in_and_redirect @user end end #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.new( provider: auth.provider, uid: auth.uid, handlename: auth.info.nickname, email: TPerformerAccount.dummy_email(auth), password: Devise.friendly_token[0, 20] ) end return user end def self.dummy_email(auth) "#{auth.uid}-#{auth.provider}@example.com" end end
↓usersテーブルに登録はできているが、、、、以下のようなエラーが出る
#error message AbstractController::DoubleRenderError in Users::OmniauthCallbacksController#twitter Render and/or redirect were called multiple times in this action. Please note that you may only call render OR redirect, and at most once per action. Also note that neither redirect nor render terminate execution of the action, so if you want to exit an action after redirecting, you need to do something like "redirect_to(...) and return"
多重でリダイレクトされていることが原因と思われるエラーが起きています。
個人的にsign_inするようなメソッドに飛ばしたいのですが、なぜこのようなことが起こるかわかりません。
ちなみにapplication_conntrollerで
#application_conntroller.rb class ApplicationController < ActionController::Base before_action :redirect_to_wizard, except: :after_sign_in_path_for def after_sign_in_path_for(resource) redirect_to_wizard end def redirect_to_wizard if user_sign_in? if current_user.first_login_flag == false redirect_to first_user_steps_url end end end
というもしfirst_login_flagが0の場合、ウィザード形式の詳細登録画面に飛ばすという処理を書いています(登録後flag=1となる)。
しかし、そもそもサインインできていないのでこの箇所は関係ないのかなとは思っています。
@userのモデルクラスのアカウントにサインインさせたいのですがどう処理を書けば上記エラーが出なくなりますでしょうか?
少し長くなってしまい恐縮ですがよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。