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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails

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

Q&A

解決済

1回答

698閲覧

google認証でログイン時にエラー

params_bird

総合スコア26

Ruby on Rails

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

0グッド

0クリップ

投稿2019/05/19 02:32

###実現したいこと
google認証でログイン

###現状報告
1、LINE認証では同じメソッド(ダミーのemail生成メソッド除く)でアカウント登録、ログインはできております。
2、google認証でアカウント登録は行えております。
3、google認証でログインのみ行えておりません。

error

12019-05-19T02:24:05.136831+00:00 app[web.1]: F, [2019-05-19T11:24:05.136771 #4] FATAL -- : [9a6eaf79-3e99-4406-872a-841d242138a4] RuntimeError (Could not find a valid mapping for nil): 22019-05-19T02:24:05.136892+00:00 app[web.1]: F, [2019-05-19T11:24:05.136838 #4] FATAL -- : [9a6eaf79-3e99-4406-872a-841d242138a4] 32019-05-19T02:24:05.136990+00:00 app[web.1]: F, [2019-05-19T11:24:05.136939 #4] FATAL -- : [9a6eaf79-3e99-4406-872a-841d242138a4] app/controllers/users/omniauth_callbacks_controller.rb:46:in `google_oauth2' 42

OmniauthCallbacksController

1 def google_oauth2 2 @auth = request.env['omniauth.auth'] 3 @user = User.where(email: @auth[:info][:email]).first 4 if @user 5 # 既にサービスに登録していればログイン処理 6 bypass_sign_in(@user) 7 flash[:notice] = I18n.t 'devise.omniauth_callbacks.success', kind: 'Google' 8 redirect_to user_mypage_path(@user.id) and return 9 else 10 @user = User.create( 11 provider: @auth[:provider], 12 uid: @auth[:uid], 13 remote_image_url: @auth[:info][:image], 14 name: @auth[:info][:name], 15 email: @auth[:info][:email], 16 password: Devise.friendly_token[0, 20], 17 ) 18 bypass_sign_in(@user) 19 flash[:notice] = I18n.t 'devise.omniauth_callbacks.success', kind: 'Google' 20 # ログインさせマイページに遷移 21 redirect_to user_mypage_path(@user.id) and return 22 end 23 end

他に必要な情報ございましたらコメントいただきく存じます。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

自己解決

下記のように修正し無事ログインも通りました。

def google_oauth2 # authサーバーからSNS情報を取得 @auth = request.env['omniauth.auth'] # authサーバーから取得したメールアドレスがUserテーブルにあるかチェック if User.find_by(email: @auth[:info][:email]).blank? # アカウントない場合にcreate @user = User.create( name: @auth[:info][:name], email: @auth[:info][:email], provider: @auth[:provider], uid: @auth[:uid], remote_image_url: @auth[:info][:image], password: Devise.friendly_token[0,20] ) # @userが新規に作られたらログイン処理に移行 if @user.persisted? bypass_sign_in(@user) flash[:notice] = I18n.t 'devise.omniauth_callbacks.success', kind: 'Google' redirect_to user_path(@user.id) and return else # 登録に失敗した場合は情報を持たせたままアカウント登録に遷移 session["devise.#{provider}_data"] = oauth.except("extra") redirect_to new_user_registration_path, alert: @user.errors.full_messages end else # authサーバーから取得したメールアドレスがUserテーブルにあった場合@userに持たせてログインメソッドへ @user = User.find_by(email: @auth[:info][:email]) bypass_sign_in(@user) flash[:notice] = I18n.t 'devise.omniauth_callbacks.success', kind: 'Google' redirect_to user_path(@user.id) and return end end

投稿2019/05/19 08:41

params_bird

総合スコア26

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問