Я пытаюсь настроить вход в Google с помощью rails 5.2.1 app и gem 'omniauth-google-oauth2'.Я ожидаю, что authenticate_user создаст пользовательский экземпляр для меня, но он не учитывает код, который я написал в Users :: OmniauthCallbacksController.Я могу видеть страницу входа в Google, и после нажатия кнопки «Разрешить» она успешно вызывает настроенный URL.Просто current_user не устанавливается.Я был бы признателен за любое направление отладки или статью, направляющую меня.
Я пытался поместить binding.pry в wardens def authenticate! (* Args) в warden-1.2.7 / lib / warden / proxy.rb, но, похоже, есть только одна стратегия: {: user =>[]}.Должен ли Google oauth также быть стратегией?
rout.rb:
devise_for :users, controllers: { omniauth_callbacks: 'users/omniauth_callbacks' }
gemfile:
gem 'rails', '~> 5.2.1'
gem 'devise'
gem 'omniauth-google-oauth2'
devise.rb: ОШИБКИ - это имя приложения Iя создаю
require 'omniauth-google-oauth2'
GOOGLE_OAUTH_MISTAKES_CONFIGURATION = {
scope: "contacts.readonly,userinfo.email",
redirect_uri: 'http://localhost:3000/home/index'
}
config.omniauth :google_oauth2, ENV['GOOGLE_CLIENT_ID'], ENV['GOOGLE_CLIENT_SECRET'], GOOGLE_OAUTH_MISTAKES_CONFIGURATION
OmniauthCallbacksController
def google_oauth2
binding.pry # Control does not reach here
# You need to implement the method below in your model (e.g. app/models/user.rb)
@user = User.from_omniauth(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'].except(:extra) # Removing extra as it can overflow some session stores
redirect_to new_user_registration_url, alert: @user.errors.full_messages.join("\n")
end
end
user.rb:
devise :omniauthable, omniauth_providers: [:google_oauth2]
.
.
.
def self.from_omniauth(access_token)
binding.pry # Control does not reach here
data = access_token.info
user = User.where(email: data['email']).first
# Uncomment the section below if you want users to be created if they don't exist
# unless user
# user = User.create(name: data['name'],
# email: data['email'],
# password: Devise.friendly_token[0,20]
# )
# end
user
end
Я ожидаю, что после того, как Google перенаправит на мой настроенный redirect_uri (который это), before_action: authenticate_user!даст мне экземпляр current_user, но он просто выбрасывает 401 много раз, пока браузер не выйдет из-за слишком большого количества 401