2011-12-07 1 views
23

Voglio disabilitare completamente i percorsi/utenti/sign_in per ottenere e pubblicare.Rails - Devise, come posso disabilitare alcune route di default?

io sia riuscito a sostituire con successo utilizzando il seguente:

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

E quando corro percorsi rake compaiono i seguenti:

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

posso accedere al segno da/admin bene da/users/sign_in. Ma voglio rimuovere completamente le ultime due righe, è possibile?

Ho provato alcune combinazioni diverse dal documentation che sembra farlo ma sovrascrive anche alcune utili, come la password/nuove e password/percorsi di modifica.

risposta

21

soluzione di Katz non funziona più come notato di Cirulli.

Provare quanto segue.

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

È possibile raggiungere questo obiettivo utilizzando il: salta opzione per 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 

Quando eseguo percorsi rake dopo che, ottengo solo:

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

Grazie tanto per rispondere alla mia domanda! Ho anche aggiunto questa eliminazione "/ logout" => "devise/sessions # destroy",: as =>: destroy_user_session per il logout e la funzionalità è esattamente ciò che volevo. :) – JohnDel

+3

Sembra non funzionare più. 'devise_for' sembra ignorare il blocco. –

1

quando si salta sessions controller, la maggior parte aggiunge destroy azione ai tuoi percorsi personalizzati troppo:

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

Qui è

devise_for :users, skip: [:sessions,:registrations], controllers: { 
    omniauth_callbacks: "users/omniauth_callbacks" 
}