web-dev-qa-db-ja.com

Rails-工夫、デフォルトルートを無効にするにはどうすればよいですか?

Getとpostのルート/ users/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からサインインにアクセスできます。しかし、最後の2行を完全に削除したいのですが、可能ですか?

documentation とは異なる組み合わせをいくつか試しましたが、これはそれを実行しているようですが、password/newルートやpassword/editルートなどの便利な組み合わせもオーバーライドします。

25
JohnDel

Katzのソリューションは、Cirulliが指摘したように機能しなくなりました。

次のことを試してください。

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
23
Rob Olendorf

これは、: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"}
21
Yehuda Katz

ここにあります

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

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
1
Zakaria