usuarios tutorial rails hacer espaƱol como autenticacion ruby-on-rails ruby-on-rails-3 devise omniauth

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 ).