2010-09-30 28 views
38

Tôi đang cố gắng để có được Custom Routes làm việc trong ứng dụng Rails của tôi (Ruby 1.9.2 với Rails 3).Tạo các tuyến đường tùy chỉnh và các trang đăng nhập

Đây là cấu hình của tôi/routes.rb tập tin

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 

Nhưng nộp mẫu đơn trên/login hoặc/đăng ký đi cho người dùng/sign_in và người dùng/sign_up. Làm cách nào để ngăn điều này xảy ra. Hoặc thậm chí tốt hơn hãy đảm bảo rằng theo mặc định tất cả các yêu cầu cho người dùng/sign_in, v.v, hãy chuyển đến các tuyến đường có liên quan chứ không phải các tuyến mặc định được tạo bởi Devise.

Ngoài ra làm cách nào tôi có thể làm cho biểu mẫu đăng nhập một phần để đưa nó vào bộ điều khiển bất kỳ? Để tôi có thể có Trang Đăng nhập trên trang chủ (chỉ mụC# home) chứ không phải trên người dùng/sign_in?

Tôi đang sử dụng Devise 1.1.3 với Rails 3 trên Ruby 1.9.2, trên Mac OSX Snow Leopard.

Cảm ơn!

Trả lời

74

Với lập mưu 1.1.3 sau nên làm việc

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

Các tuyến đường nó tạo ra sẽ không được nối với "/ user/... "vì tham số :path là một chuỗi rỗng. Mã băm :pathnames sẽ đảm bảo đặt tên cho các tuyến mà bạn muốn.Đưa ra sẽ sử dụng các tuyến đường nội bộ để trình/đăng nhập sẽ làm việc như bạn muốn và không đưa bạn đến/người dùng/log_in

Để thêm một hình thức đăng nhập để trang bìa của bạn có thông tin tại lập mưu Wiki: http://github.com/plataformatec/devise/wiki/How-To:-Display-a-custom-sign_in-form-anywhere-in-your-app

Hoặc làm một cái gì đó như thế này:

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

Trong mã bạn đặt ": đường dẫn", trong văn bản bạn đã nói ": as", đã được sửa. – tokland

+7

thông báo Devise 2.1.2 (phiên bản mới hơn) sử dụng số nhiều 'devise_for: users' – AJcodez

+0

Cách tiếp cận này hoạt động, nhưng bạn đang bị mắc kẹt bằng cách sử dụng đường dẫn Devise mặc định như' new_user_session_path'. Để có được những người trợ giúp như 'login_path', bạn có thể đặt khối' devise_for: user do' mà OP có ngay bên dưới câu trả lời này, và bạn sẽ có được kết quả tốt nhất của cả hai thế giới. –

0

Sử dụng này ở phía trên cùng của tập tin routes.rb của bạn

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

sử dụng này vào nơi tập tin chỉ mục của bạn. nếu nó là trên mô hình người dùng của bạn, sử dụng trên hoặc thay đổi cho phù

+0

Sẽ làm việc này vì có các trang đăng nhập trên trang chủ. Chúng nằm trong chỉ mụC# home. Và đưa ra (http://github.com/plataformatec/devise/) sử dụng mô hình người dùng. –

+0

Không hoạt động. Tên của bộ điều khiển của tôi là nhà và nó không phát hiện được tuyến đường/trên trang chủ. –

3

Bạn chỉ cần không đặt tuyến đường đặc biệt của bạn trong devise_for khối

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 

Bây giờ công trình/đăng nhập./users/sign_in cũng vậy.

+2

Tôi không muốn người dùng/tuyến đường sign_in hoạt động. Tôi chỉ muốn các tuyến tùy chỉnh hoạt động và chúng phải hoạt động trong tất cả các trình điều khiển và chế độ xem sử dụng nó. –

1

Tôi tạo ra bộ điều khiển auth của riêng tôi và chuyển devise phiên điều khiển để điều khiển của tôi

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

:path => '/', 

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

Mã này sẽ thêm/đăng nhập và/logout url.

Thông tin thêm về điều này, bạn có thể tìm thấy trong mã nguồn http://github.com/plataformatec/devise/blob/master/lib/devise/rails/routes.rb

+0

Giải pháp của Canthiswait hoạt động tuyệt vời, vì vậy tôi không thử tạo một bộ điều khiển tùy chỉnh mới. –

+0

gr8 :) tất nhiên bạn không cần cài đặt bộ điều khiển: path_names rất quan trọng – Vlada

5

Sau đây làm việc cho tôi:

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

Tuyến đường:

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 
Các vấn đề liên quan