2010-09-30 5 views
38

Próbuję uzyskać niestandardowe trasy pracy w mojej aplikacji Rails (Ruby 1.9.2 z Rails 3).Tworzenie niestandardowych tras i stron logowania

To jest mój plik 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 

Ale składając formularz na/login i/lub rejestru trafia do użytkowników/sign_in a użytkownicy/sign_up. Jak temu zapobiec? Lub jeszcze lepiej upewnij się, że domyślnie wszystkie żądania dla użytkowników/sign_in itp. Idą do odpowiednich tras, a nie do domyślnych tras generowanych przez Devise.

Co zrobić, aby formularz logowania był częściowy, aby uwzględnić go w dowolnym kontrolerze? Czy mogę mieć stronę logowania na stronie głównej (indeks domu), a nie na użytkowników/sign_in?

Używam Devise 1.1.3 z Rails 3 na Ruby 1.9.2, w Mac OSX Snow Leopard.

Dzięki!

Odpowiedz

74

Z opracować 1.1.3 następujące powinny pracować

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

The trasy to tworzy nie będzie dołączana z „/ user/... "z powodu parametru :path będącego pustym ciągiem znaków. Skrót :pathnames zajmie się nazwami tras, jak chcesz.Opracować użyje tych tras wewnętrznie więc składanie/login będzie działać jak chcesz i nie można dostać się do/user/log_in

Aby dodać formularz logowania na swojej stronie głównej nie ma informacji na opracować encyklopedii: http://github.com/plataformatec/devise/wiki/How-To:-Display-a-custom-sign_in-form-anywhere-in-your-app

Albo zrobić coś takiego:

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

W kodzie umieszczasz ": ścieżka", w tekście, który powiedziałeś ": as", poprawiono. – tokland

+7

notice Devise 2.1.2 (nowsza wersja) używa liczby mnogiej 'devise_for: users' – AJcodez

+0

To podejście działa, ale utknąłeś przy użyciu domyślnych pomocników ścieżek Devise, takich jak' new_user_session_path'. Aby uzyskać pomocników takich jak 'login_path', możesz umieścić blok' devise_for: user do', który OP ma tuż pod tą odpowiedzią, a otrzymasz to, co najlepsze z obu światów. –

0

Użyj tego na górze routes.rb pliku

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

używać tego gdzie jest plik indeksu. jeśli jest to od modelu użytkowników, użyj powyżej lub zmienić odpowiednio

+0

Czy ta praca za posiadanie strony logowania na stronie głównej. Znajdują się one w indeksie home #. I opracuj (http://github.com/plataformatec/devise/) używa modelu użytkownika. –

+0

Nie działa. Nazwa mojego kontrolera jest w domu i nie wykrywa trasy/na stronie głównej. –

3

Trzeba tylko nie umieścić specjalną trasą w devise_for bloku

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 

teraz pracuje/zalogować./users/sign_in też.

+2

Nie chcę, aby użytkownicy/sign_in do pracy. Chcę tylko, aby niestandardowe trasy działały i powinny być aktywne we wszystkich kontrolerach i widokach, które z nich korzystają. –

1

tworzę własny kontroler uwierzytelniający i kierowane opracować kontroler sesje do mojego kontrolera

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

:path => '/', 

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

Ten kod doda/login i/wylogowania adresy URL.

Więcej na ten temat można znaleźć w kodzie źródłowym http://github.com/plataformatec/devise/blob/master/lib/devise/rails/routes.rb

+0

Rozwiązanie Canthiswaita działa świetnie, więc nie próbowałem tworzyć nowego kontrolera niestandardowego. –

+0

gr8 :) Oczywiście nie potrzebujesz ustawienia kontrolera: nazwa_tytułu jest kluczowa – Vlada

5

następujące pracował dla mnie:

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

Config:

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' } 

Trasy:

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