ActionController :: RoutingError (неинициализированная константа Users :: OmniauthCallbacksController) Devise и google_oauth2 - PullRequest
0 голосов
/ 22 февраля 2019

Я следовал руководству по по этой ссылке и продолжаю получать следующие сообщения журнала:

Started GET "/users/auth/google_oauth2" for 127.0.0.1 at 2019-02-22 20:59:25 +1100
I, [2019-02-22T20:59:25.512091 #11001]  INFO -- omniauth: (google_oauth2) Request phase initiated.
Started GET "/users/auth/google_oauth2/callback?state=...
I, [2019-02-22T20:59:29.060352 #11001]  INFO -- omniauth: (google_oauth2) Callback phase initiated.

ActionController::RoutingError (uninitialized constant Users::OmniauthCallbacksController):

Я искал в Интернете, и все решения предлагают проверить орфографию вразличные файлы.Я включил их ниже.

Разработка _links.html.erb:

<%- if devise_mapping.omniauthable? %>
  <%- resource_class.omniauth_providers.each do |provider| %>
    <%= link_to "Sign in with #{OmniAuth::Utils.camelize(provider)}", user_google_oauth2_omniauth_authorize_path %><br />
  <% end -%>
<% end -%>

devise.rb:

config.omniauth :google_oauth2, client_id, client_secret, {
    scope: "contacts.readonly,userinfo.email,userinfo.profile,youtube",
    prompt: 'select_account',
    image_aspect_ratio: 'square',
    image_size: 50
}

User.rb:

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :omniauthable, :omniauth_providers => [:google_oauth2]

  def self.from_omniauth(auth)
    where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
      user.token = auth.credentials.token
      user.expires = auth.credentials.expires
      user.expires_at = auth.credentials.expires_at
      user.refresh_token = auth.credentials.refresh_token
    end
  end
end

/ app / controllers / users / omniauth_callbacks_controllers.rb

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController

  def google_oauth2
    @user = User.from_omniauth(request.env["omniauth.auth"])
    if @user.persisted?
      sign_in @user, :event => :authentication #this will throw if @user is not activated
      set_flash_message(:notice, :success, :kind => "Google") if is_navigational_format?
    else
      session["devise.google_data"] = request.env["omniauth.auth"]
    end
    redirect_to '/'
  end

end

rout.rb

devise_for :users, controllers: {omniauth_callbacks: "users/omniauth_callbacks"}

консоль Google

Я настроил консоль Google со следующими URL-адресами авторизованного перенаправления:

http://localhost:3000/users/auth/google_oauth2/callback

Рельсовые маршруты

Когда я делаю rails routes, у меня есть:

user_google_oauth2_omniauth_authorize GET|POST /users/auth/google_oauth2(.:format)                                                      users/omniauth_callbacks#passthru
user_google_oauth2_omniauth_callback GET|POST /users/auth/google_oauth2/callback(.:format)                                             users/omniauth_callbacks#google_oauth2

Любая помощь, чтобы узнать, почему это не работает, будет принята с благодарностью.

1 Ответ

0 голосов
/ 22 февраля 2019

/ app / controllers / users / omniauth_callbacks_controllers.rb

Это не правильно.У вас есть дополнительный s в имени вашего контроллера.Вот почему рельсам не удается найти класс.Вы должны переименовать имя вашего контроллера в omniauth_callbacks_controller.rb.

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