2011-12-07 25 views
23

Tôi muốn tắt hoàn toàn các tuyến đường/người dùng/sign_in để nhận và đăng.Rails - Devise, làm thế nào tôi có thể vô hiệu hóa một số tuyến đường mặc định?

tôi đã có thể thành công ghi đè lên chúng bằng cách sử dụng sau đây:

devise_for :users do 
     get "/admin" => "devise/sessions#new", :as => :new_user_session 
     post "/admin" => "devise/sessions#create", :as => :user_session 
    end 

Và khi tôi chạy tuyến cào tôi thấy như sau:

new_user_session GET /admin(.:format)    {:controller=>"devise/sessions", :action=>"new"} 
    user_session  POST /admin(.:format)    {:controller=>"devise/sessions", :action=>"create"} 
    new_user_session GET /users/sign_in(.:format)  {:action=>"new", :controller=>"devise/sessions"} 
        POST /users/sign_in(.:format)  {:action=>"create", :controller=>"devise/sessions"} 

tôi có thể truy cập đăng nhập từ/admin như cũng như từ/users/sign_in. Nhưng tôi muốn loại bỏ hoàn toàn hai hàng cuối cùng, có thể không?

Tôi đã thử một số kết hợp khác nhau từ documentation mà dường như làm điều đó nhưng nó cũng ghi đè một số kết hợp hữu ích, như mật khẩu/mới và mật khẩu/chỉnh sửa tuyến đường.

Trả lời

21

giải pháp Katz không còn hoạt động như đã nêu bởi Cirulli.

Hãy thử cách sau.

devise_for :users, :skip => [:sessions] 

as :user do 
    get "/admin" => "devise/sessions#new", :as => :new_user_session 
    post "/admin" => "devise/sessions#create", :as => :user_session 
end 
21

Bạn có thể đạt được điều này bằng cách sử dụng các: skip tùy chọn để devise_for:

devise_for :users, :skip => [:sessions] do 
    get "/admin" => "devise/sessions#new", :as => :new_user_session 
    post "/admin" => "devise/sessions#create", :as => :user_session 
end 

Khi tôi chạy tuyến cào sau đó, tôi nhận được chỉ là:

new_user_session GET /admin(.:format)    {:controller=>"devise/sessions", :action=>"new"} 
     user_session POST /admin(.:format)    {:controller=>"devise/sessions", :action=>"create"} 
+0

Cảm ơn bạn rất nhiều vì đã trả lời câu hỏi của tôi! Tôi cũng đã thêm xóa "/ logout" => "devise/sessions # destroy",: as =>: destroy_user_session cho đăng xuất và chức năng chính xác là những gì tôi muốn. :) – JohnDel

+3

Dường như không hoạt động nữa. 'devise_for' có vẻ như nó bỏ qua khối. –

1

khi bạn bỏ qua sessions điều khiển, bạn nhất thêm destroy hành động để các tuyến đường tùy chỉnh của bạn quá:

as :user do 
    get "/admin" => "devise/sessions#new", :as => :new_user_session 
    post "/admin" => "devise/sessions#create", :as => :user_session 
    delete "/logout" => "devise/sessions#destroy", :as => :destroy_user_session 
end 
5

Dưới đây là

devise_for :users, skip: [:sessions,:registrations], controllers: { 
    omniauth_callbacks: "users/omniauth_callbacks" 
} 
Các vấn đề liên quan