2014-06-26 11 views
12

Sto usando Rails + Devise + OmniAuth + Google OAuth2.metodo non definito `session_path '

Il mio modello utente (user.rb) contiene:

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

miei routes.rb assomigliano:

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 

Quando vado a/sign_in, ottengo un'eccezione come:

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

in:

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

in linea:

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

se aggiungo: database_authenticatable per user.rb tutto inizia a lavorare, ma voglio che i miei utenti siano in grado di firmare-in tramite Google OAuth2 solo, quindi non voglio : database_authenticable. Sembra che session_path non sia disponibile per qualche motivo, ma non sono sicuro del perché e come renderlo disponibile.

Grazie, Jen

+0

Ho lo stesso problema, ma non sto utilizzando OmniAuth o Google OAuth2. L'hai risolto alla fine? – Moh

risposta

0

credo che, come si usa devise_scope per le sessions percorsi, è necessario aggiungere skip al vostro devise_for chiamata, in questo modo:

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

Ciò potrebbe non generare gli helper del percorso per il controller sessions

-1

Provare a modificare questa riga

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

a

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

È necessario riavviare il server rotaie. Questa era la soluzione per me.

+1

Sì. Ho aggiunto un file registrations_controller.rb e ho dimenticato di riavviare. Lezione: la struttura del file è come un inizializzatore in modalità di sviluppo. – Jerome

+0

Risposta utile. Risparmiate più tempo di quanto Geico risparmia sull'assicurazione. – HoosierCoder