ruby on rails - tutorial - No se puede conseguir el funcionamiento omniauthable
rails devise roles (1)
Necesito acceder a las API de Google, estoy tratando de hacer que los usuarios inicien sesión con su cuenta de google usando Devise 2.1.1 y Omniauth (usando la gema google_oauth2
ya que OAuth2 es la recomendada de los documentos de google).
Desafortunadamente no puedo hacer que funcione, esta es la routes.rb
TestApp::Application.routes.draw do
root :to => ''Landing#index''
devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
devise_scope :user do
get ''sign_in'', :to => ''users/sessions#new'', :as => :new_session
get ''sign_out'', :to => ''users/sessions#destroy'', :as => :destroy_session
end
end
Luego configuré config/initializers/devise.rb
para incluir una línea con
config.omniauth :google_oauth2, ''ID'', ''SECRET'', {access_type: ''offline'', approval_prompt: ''force'', scope: ''https://www.googleapis.com/auth/analytics.readonly''}
Y en realidad tengo una app/controllers/users/omniauth_callbacks_controller.rb
clase de devolución de llamada vacía app/controllers/users/omniauth_callbacks_controller.rb
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
end
Cuando hago clic en "Iniciar sesión con Google" me redireccionan a Google, solicitando autorización, luego vuelvo a la devolución de llamada y me redirigen a la URL http://localhost:3000/sign_in.user
con el error
uninitialized constant Users::SessionsController
¿Qué pasa aquí? Pasé 2 días tratando de resolverlo por mí mismo, jugué con muchas configuraciones pero nunca lo puse en funcionamiento, está empezando a frustrarme.
Este es el resultado de las rake routes
root / Landing#index
user_omniauth_authorize /users/auth/:provider(.:format) users/omniauth_callbacks#passthru {:provider=>/google_oauth2/}
user_omniauth_callback /users/auth/:action/callback(.:format) users/omniauth_callbacks#(?-mix:google_oauth2)
new_session GET /sign_in(.:format) users/sessions#new
destroy_session GET /sign_out(.:format) users/sessions#destroy
Parece que lo redirigen a su ruta de sign_in
que busca users/sessions#new
según sus routes.rb
.
Sin embargo, Users::SessionsController
no existe, lo que da como resultado el error que describes.
No estoy seguro de en qué escenarios Devise / OmniAuth te redirige a esa ruta específica, pero imagino que puedes ir a tu página principal (donde las personas pueden hacer clic en el botón / enlace de inicio de sesión de Google OAuth nuevamente) o conectarla directamente a la página Google OAuth. (Esto puede hacer que la gente se quede atrapada en un ciclo infinito dependiendo de cómo Devise / OmniAuth utilice la ruta sign_in
).