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