実現したいこと
現在railsでツイッタークローンアプリを作成しております。
こちらの記事を参考にDeviseとOmniauthを使って、RailsアプリにGoogleログイン機能を実装しました。
sign_inのviewファイルからgoogleログインをすると、記憶されているためか自動的にアプリケーションにサインインされます。(uidの記憶?)
ポートフォリオとして作成しているため、googleログインを押下した際に、毎度下記の図のようにどのアカウントでログインするのか、という画面を挟んで毎度認証させるようにしたいです。
該当コード
OmniauthCallbacksController
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController def google_oauth2 callback_for(:google) end # common callback method def callback_for(provider) @user = User.from_omniauth(request.env["omniauth.auth"]) if @user.persisted? sign_in_and_redirect @user, event: :authentication #this will throw if @user is not activated set_flash_message(:notice, :success, kind: "#{provider}".capitalize) if is_navigational_format? else session["devise.#{provider}_data"] = request.env["omniauth.auth"].except("extra") redirect_to new_user_registration_url end end def failure redirect_to root_path end
UserModel
# omniauthのコールバック時に呼ばれるメソッド def self.from_omniauth(auth) where(provider: auth.provider, uid: auth.uid).first_or_create do |user| user.email = auth.info.email user.password = Devise.friendly_token[0,20] end end
DeviseRb
config.omniauth :google_oauth2,ENV['GOOGLE_CLIENT_ID'],ENV['GOOGLE_CLIENT_SECRET']#, scope: 'email', redirect_uri: "#{ENV['HOST']}/users/auth/google_oauth2/callback" OmniAuth.config.logger = Rails.logger if Rails.env.development?
ログインの際は以下link_toで遷移させています。
<p><%= link_to "Sign in with Google", user_google_oauth2_omniauth_authorize_path, method: :post %></p>
最後に
rails consoleでuidの値をnilにしてみたりしたのですが、Sign in with Googleを押下するとnew_registration_pathに飛ばされるようになりました。
おそらくコントローラのelse文が走っているのかと考えています。
cookieを削除しても特に変化は見られませんでした。(仮にうまくいっても運用上扱いづらいですよね)
お力添えいただけるとありがたいです。
何卒よろしくお願いいたします。
※足りない点などあれば修正依頼等いただければと思います!
まだ回答がついていません
会員登録して回答してみよう