Rails - Разработайте, как я могу отключить некоторые маршруты по умолчанию? - PullRequest
25 голосов
/ 07 декабря 2011

Я хочу полностью отключить маршруты / пользователи / sign_in для получения и публикации.

Мне удалось успешно переопределить их, используя следующее:

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

И когда я запускаю рейковые маршруты, я вижу следующее:

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

Я могу получить доступ к входу из / admin, а также из / users / sign_in. Но я хочу полностью удалить последние две строки, это возможно?

Я попробовал несколько различных комбинаций из документации , которая, кажется, делает это, но также переопределяет некоторые полезные, такие как пароль / новый и пароль / маршруты редактирования.

Ответы [ 4 ]

23 голосов
/ 29 января 2014

Решение Каца больше не работает, как заметил Цирулли.

Попробуйте следующее.

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 голосов
/ 10 декабря 2011

Вы можете достичь этого, используя опцию: skip для 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

Когда я запускаю рейк-маршруты после этого, я получаю только:

    new_user_session GET    /admin(.:format)               {:controller=>"devise/sessions", :action=>"new"}
        user_session POST   /admin(.:format)               {:controller=>"devise/sessions", :action=>"create"}
5 голосов
/ 23 мая 2015

Вот оно

devise_for :users, skip: [:sessions,:registrations], controllers: {
  omniauth_callbacks: "users/omniauth_callbacks"
}
1 голос
/ 30 марта 2015

когда вы пропускаете sessions контроллер, вы больше всего добавляете действие destroy к своим маршрутам:

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
...