Rails - Devise, how can I disable some default routes?

折月煮酒 提交于 2019-11-30 21:33:32

问题


I want to completely disable the routes /users/sign_in for get and post.

I was able to successfully override them using the following:

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

And when I run rake routes I see the following:

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

I can access the sign in from /admin as well as from /users/sign_in. But I want to completely remove the last two rows, is it possible?

I tried some different combinations from the documentation which seems to do it but it also overrides some useful ones, like the password/new and password/edit routes.


回答1:


Katz's solution no longer works as noted by Cirulli.

Try the following.

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



回答2:


You can achieve this by using the :skip option to 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

When I run rake routes after that, I get just:

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



回答3:


Here it is

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



回答4:


when you skip sessions controller, you most add destroy action to your custom routes too:

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


来源:https://stackoverflow.com/questions/8418514/rails-devise-how-can-i-disable-some-default-routes

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!