2010-09-30 19 views
38

मैं अपने रेल एप्लिकेशन (रूबी 1.9.2 के साथ रेल 3) में काम कर रहे कस्टम रूट प्राप्त करने की कोशिश कर रहा हूं।डिवाइसेज कस्टम रूट्स और लॉग इन पेज

यह मेरा config/routes.rb फ़ाइल

match '/dashboard' => 'home#dashboard', :as => 'user_root' 
devise_for :user do 
    get "/login", :to => "devise/sessions#new" # Add a custom sign in route for user sign in 
    get "/logout", :to => "devise/sessions#destroy" # Add a custom sing out route for user sign out 
    get "/register", :to => "devise/registrations#new" # Add a Custom Route for Registrations 
end 

लेकिन/लॉगिन या/रजिस्टर पर पर्चे को जमा है/उपयोगकर्ताओं को जाता है और उपयोगकर्ताओं/sign_up sign_in। मैं इसे कैसे होने से रोक सकता हूं। या इससे भी बेहतर यह सुनिश्चित करें कि डिफ़ॉल्ट रूप से उपयोगकर्ता/sign_in आदि के लिए सभी अनुरोध प्रासंगिक मार्गों पर जाएं, न कि डेविस द्वारा उत्पन्न डिफ़ॉल्ट मार्ग।

मैं लॉगिन नियंत्रक को किसी भी नियंत्रक में शामिल करने के लिए आंशिक रूप से कैसे बना सकता हूं? ताकि मेरे पास होमपेज पर लॉगिन पेज हो (होम # इंडेक्स) और उपयोगकर्ताओं/sign_in पर नहीं?

मै मैक ओएसएक्स हिम तेंदुए पर रूबी 1.9.2 पर रेल 3 के साथ डेविस 1.1.3 का उपयोग कर रहा हूं।

धन्यवाद!

उत्तर

74
वसीयत के साथ

में पा सकते हैं के बारे में अधिक 1.1.3 निम्नलिखित

devise_for :user, :path => '', :path_names => { :sign_in => "login", :sign_out => "logout", :sign_up => "register" } 

मार्गों यह बनाता है के साथ संलग्न नहीं किए जाएंगे काम करना चाहिए "/ उपयोगकर्ता/... ":path पैरामीटर की वजह से खाली स्ट्रिंग है। :pathnames हैश आपको पसंद के मार्गों का नाम देने का ख्याल रखेगा। http://github.com/plataformatec/devise/wiki/How-To:-Display-a-custom-sign_in-form-anywhere-in-your-app

: वसीयत और इतने आंतरिक रूप से इन रूट का उपयोग/लॉगिन करने के लिए प्रस्तुत करने के रूप में आप चाहते हैं काम करेंगे नहीं लेने के लिए/उपयोगकर्ता/log_in

आपके मुखपृष्ठ पर एक लॉगिन प्रकार जोड़ने के लिए वहाँ वसीयत विकी पर जानकारी है

या करना चाहते हैं कुछ इस तरह:

<%= form_tag new_user_session_path do %> 
    <%= text_field_tag 'user[email]' %> 
    <%= password_field_tag 'user[password]' %> 
<%= submit_tag 'Login' %> 
+1

उस कोड में जिसे आपने ": पथ" रखा है, उस पाठ में जिसे आपने कहा था: "as", fixed। – tokland

+7

नोटिस डेविस 2.1.2 (बाद का संस्करण) बहुवचन 'devise_for: उपयोगकर्ता' – AJcodez

+0

का उपयोग करता है यह दृष्टिकोण काम करता है, लेकिन आप' new_user_session_path' जैसे डिफ़ॉल्ट डिवाइस पथ सहायताकर्ताओं का उपयोग करके फंस गए हैं। 'Login_path' जैसे सहायक प्राप्त करने के लिए, आप' devise_for: उपयोगकर्ता do' ब्लॉक डाल सकते हैं कि ओपी इस उत्तर से नीचे है, और आप दोनों दुनिया के सर्वश्रेष्ठ प्राप्त करेंगे। –

0

अपने routes.rb फ़ाइल

map.connect "users/:action", :controller => 'users', :action => /[a-z]+/i 

जहां आपकी अनुक्रमणिका फ़ाइल है पर इस्तेमाल के लिए इस के शीर्ष पर इस का प्रयोग करें। अगर यह अपने उपयोगकर्ताओं को मॉडल पर है, इसके बाद के संस्करण का उपयोग करें या उसके अनुसार बदल

+0

विल मुख पृष्ठ पर प्रवेश पृष्ठों होने के लिए यह काम। वे घर # सूचकांक में रहते हैं। और devise (http://github.com/plataformatec/devise/) उपयोगकर्ता मॉडल का उपयोग करता है। –

+0

काम नहीं करता है। मेरा नियंत्रक का नाम घर है और यह मार्ग/होम पेज पर नहीं पता लगाता है। –

3

तुम बस जरूरत है devise_for ब्लॉक

match '/dashboard' => 'home#dashboard', :as => 'user_root' 
get "/login", :to => "devise/sessions#new" # Add a custom sign in route for user sign in 
get "/logout", :to => "devise/sessions#destroy" # Add a custom sing out route for user sign out 
get "/register", :to => "devise/registrations#new" # Add a Custom Route for Registrations 
devise_for :user 

अब/लॉगिन कार्यों में अपने विशेष मार्ग न रखें।/उपयोगकर्ता/sign_in भी।

+2

मैं नहीं चाहता कि उपयोगकर्ता/साइन_इन मार्ग काम करें। मैं केवल कस्टम मार्गों को काम करना चाहता हूं, और वे सभी नियंत्रकों और विचारों में सक्रिय होना चाहिए जो इसका उपयोग करते हैं। –

1

मैं अपने खुद के प्रमाणन नियंत्रक बनाया है और मेरी नियंत्रक

devise_for :users, 
:controllers => { 
    :sessions => 'auth' }, 

:path => '/', 

:path_names => { 
    :sign_in => 'login', 
    :sign_out => 'logout' } 

को वसीयत सत्र नियंत्रक कराई इस कोड/लॉगिन और/लॉगआउट यूआरएल जोड़ देगा।

यह आप स्रोत कोड http://github.com/plataformatec/devise/blob/master/lib/devise/rails/routes.rb

+0

कैंटिसवाइट का समाधान अद्भुत काम करता है, इसलिए मैंने एक नया कस्टम नियंत्रक बनाने की कोशिश नहीं की। –

+0

gr8 :) बेशक आपको नियंत्रक सेटिंग की आवश्यकता नहीं है: path_names महत्वपूर्ण है – Vlada

5

मेरे लिए काम किया है:

devise_for :users do 
    get "/login" => "devise/sessions#new" 
    get "/register" => "devise/registrations#new" 
    end 
1

कॉन्फ़िग:

devise_scope :user do 
    get 'profile/edit' => 'devise/registrations#edit', :as => :edit_user_registration 
    get 'profile/cancel' => 'devise/registrations#cancel', :as => :cancel_user_registration 
    end 

    devise_for :users, 
       :path => '', 
       :path_names => { :sign_in =>  'login', 
           :sign_out =>  'logout', 
           :sign_up =>  '', 
           :registration => 'register', 
           :edit =>   'edit', 
           :cancel =>  'cancel', 
           :confirmation => 'verification' } 

मार्गों:

edit_user_registration GET /profile/edit(.:format)  devise/registrations#edit 
cancel_user_registration GET /profile/cancel(.:format) devise/registrations#cancel 
     new_user_session GET /login(.:format)    devise/sessions#new 
      user_session POST /login(.:format)    devise/sessions#create 
    destroy_user_session DELETE /logout(.:format)   devise/sessions#destroy 
      user_password POST /password(.:format)   devise/passwords#create 
     new_user_password GET /password/new(.:format)  devise/passwords#new 
     edit_user_password GET /password/edit(.:format)  devise/passwords#edit 
         PATCH /password(.:format)   devise/passwords#update 
         PUT /password(.:format)   devise/passwords#update 
         GET /register/cancel(.:format) registrations#cancel 
     user_registration POST /register(.:format)   registrations#create 
    new_user_registration GET /register(.:format)   registrations#new 
         GET /register/edit(.:format)  registrations#edit 
         PATCH /register(.:format)   registrations#update 
         PUT /register(.:format)   registrations#update 
         DELETE /register(.:format)   registrations#destroy 
संबंधित मुद्दे