2014-06-26 11 views
12

मैं रेल + डेविस + ओमनीएथ + Google OAuth2 का उपयोग कर रहा हूं।अपरिभाषित विधि 'session_path'

मेरे उपयोगकर्ता मॉडल (user.rb) शामिल हैं:

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

मेरे routes.rb की तरह लग रहे:

:

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 

जब मैं/sign_in में जाओ, मैं की तरह एक अपवाद मिल

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

में:

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

लाइन में:

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

अगर मैं जोड़ें: यह सब काम करना शुरू करता user.rb को database_authenticatable, लेकिन मैं अपने उपयोगकर्ताओं को साइन-इन करने के लिए गूगल OAuth2 के माध्यम से ही सक्षम होना चाहते हैं, तो मैं नहीं करना चाहती : database_authenticable। ऐसा लगता है कि session_path किसी कारण से उपलब्ध नहीं है, लेकिन मुझे यकीन नहीं है कि इसे क्यों और कैसे उपलब्ध कराया जाए।

धन्यवाद, जेन

+0

मुझे एक ही समस्या है, लेकिन मैं ओमनीएथ या तो Google OAuth2 का उपयोग नहीं कर रहा हूं। क्या आपने अंत में इसे हल किया? – Moh

उत्तर

0

मेरा मानना ​​है कि है कि, जैसा कि आप sessions पथ के लिए devise_scope उपयोग करते हैं, तो आप अपने devise_for कॉल करने के लिए skip जोड़ने के लिए है, इसलिए की तरह की जरूरत है: ऐसा नहीं कर रहा होगा

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

sessions नियंत्रक के लिए मार्ग सहायकों उत्पन्न इस लाइन को बदलने के लिए

-1

कोशिश

+०१२३५१६४१०
post 'sign_in', :to => 'devise/session#create', :as => :user_session 

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

आप रेल सर्वर रिबूट की जरूरत है। वह मेरे लिए समाधान था।

+1

हां। मैंने एक registrations_controller.rb फ़ाइल जोड़ा और रीबूट करने के लिए भूल गया। सबक: फ़ाइल संरचना विकास मोड में प्रारंभकर्ता की तरह है। – Jerome

+0

उपयोगी उत्तर। जिओको बीमा पर बचाता है उससे अधिक समय बचाया। – HoosierCoder

संबंधित मुद्दे