tutorial sessions rails google gema ruby-on-rails ruby devise omniauth

ruby-on-rails - sessions - gem devise ruby on rails



método indefinido `session_path '' (3)

Estoy usando Rails + Devise + OmniAuth + Google OAuth2.

Mi modelo de usuario (user.rb) contiene:

devise :registerable, :omniauthable, :omniauth_providers => [:google_oauth2]

Mis rutas.rb se parecen a:

Rails.application.routes.draw do devise_for :users, controllers: { omniauth_callbacks: ''omniauth_callbacks'' } devise_scope :user do get ''sign_in'', :to => ''devise/sessions#new'', :as => :new_user_session post ''sign_in'', :to => ''devise/session#create'', :as => :user_session get ''sign_out'', :to => ''devise/sessions#destroy'', :as => :destroy_user_session end get ''services'', to: ''static_pages#services'' get ''my_account'', to: ''my_account#index'' get ''invite'', to: ''invite#show'' get ''invite/:id'', to: ''invite#show'' root ''static_pages#home'' end

Cuando voy a / sign_in, obtengo una excepción como:

undefined method `session_path'' for #<#<Class:0x007f9b7173af28>:0x007f9b713d8da8>

en:

~/.rvm/gems/ruby-2.1.1/gems/devise-3.2.4/app/views/devise/sessions/new.html.erb

en línea:

<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>

Si agrego: database_authenticatable to user.rb, todo comienza a funcionar, pero quiero que mis usuarios puedan iniciar sesión solo a través de Google OAuth2, por lo que no quiero: database_authenticable. Parece que session_path no está disponible por algún motivo, pero no estoy seguro de por qué y cómo hacerlo.

Gracias jen


Creo que, a medida que usa devise_scope para las rutas de las sessions , necesita agregar skip a su llamada de devise_for , así:

devise_for :users, skip: [:sessions], controllers: { omniauth_callbacks: ''omniauth_callbacks'' }

Al hacerlo, no se generarán los ayudantes de ruta para el controlador de sessions


Intenta cambiar esta linea

post ''sign_in'', :to => ''devise/session#create'', :as => :user_session

a

post ''sign_in'', :to => ''devise/session#create'', :as => :session


Necesitas reiniciar el servidor de rieles. Esa fue la solución para mí.