質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

Q&A

解決済

1回答

1657閲覧

(rails)devise & omniauth-twitterを使いuserを登録後、サインインできない

widget11

総合スコア221

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

0グッド

0クリップ

投稿2020/06/15 15:03

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のモデルクラスのアカウントにサインインさせたいのですがどう処理を書けば上記エラーが出なくなりますでしょうか?
少し長くなってしまい恐縮ですがよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

bypass_sign_in(@user)
redirect_to @user
でうまく行きました

投稿2020/06/15 16:15

widget11

総合スコア221

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問