Rails - Devise,如何禁用一些默认路由?

27

我希望完全禁用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

当我运行rake routes时,我看到以下内容:

    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 访问登录页面,但我想完全删除最后两行,这可能吗?
我尝试了一些不同的组合,来自 文档,似乎可以做到这一点,但它也覆盖了一些有用的路由,如 password/new 和 password/edit。
4个回答

27

正如Cirulli所指出的那样,Katz的解决方案已经不再有效。

请尝试以下方法。

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

你可以使用devise_for的: skip选项来实现此功能:

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

之后我运行rake routes,结果只显示:

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

非常感谢您回答我的问题!我还添加了这个 delete "/logout" => "devise/sessions#destroy", :as => :destroy_user_session 用于注销,功能正是我想要的。 :) - JohnDel
4
似乎不再起作用了。devise_for 看起来忽略了这个块。 - kettlepot

5

这就是它

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

3

如果您跳过 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接