#実現したい事
Deviseとomniauth-google-oauth2を使ったログイン機能の実装をしています。
こちらの記事とこちらの記事(補足的)
を参考に実装を行ったところ、最後の段階でエラーが出ました(同じエラーが出ている方もいらっしゃるようです。バージョンの問題?)
#開発環境
ruby 2.6.5
Rails 6.0.3.2
ローカル
Mysql
#エラー内容
"Signin with Google" に進むと以下のエラーがでます。
####Not found. Authentication passthru
ご教授いただけますと幸いです。
#該当のコード
config/initializers/devise.rb
Devise.setup do |config| require 'devise/orm/active_record' config.omniauth :google_oauth2, ENV['hoge'], # 環境変数に先ほど控えたクライアントIDを入れておく ENV['hoge'], # 環境変数に先ほど控えたシークレットを入れておく name: :google, scope: %w(email) 省略 end
user.rb
class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable, :trackable, :omniauthable, omniauth_providers: %i(google_oauth2) 省略 protected def self.find_for_google(auth) user = User.find_by(email: auth.info.email) unless user user = User.create(name: auth.info.name, provider: auth.provider, uid: auth.uid, token: auth.credentials.token, password: Devise.friendly_token[0, 20], meta: auth.to_yaml) end user end
controllers/users/omniauth_callbacks_controller.rb
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController def google_oauth2 @user = User.find_for_google(request.env['omniauth.auth']) if @user.persisted? flash[:notice] = I18n.t 'devise.omniauth_callbacks.success', kind: 'Google' sign_in_and_redirect @user, event: :authentication else session['devise.google_data'] = request.env['omniauth.auth'] redirect_to new_user_registration_url end end end
routes.rb
Rails.application.routes.draw do devise_for :users, controllers: { omniauth_callbacks: "users/omniauth_callbacks" } 省略
views/devise/sessions/new.html.erb
<h2>Log in</h2> <%= link_to 'Googleでログインする', user_google_oauth2_omniauth_authorize_path(:google) %> 省略
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/03 03:18