Как решить, почему OmniauthCallbacksController # google_oauth2 не вызывается в authenticate_user - PullRequest
0 голосов
/ 25 мая 2019

Я пытаюсь настроить вход в 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...