如何在登录路径后隐藏控制器名称的url设置?

问题描述:

当我重定向到main_index_pathafter_sign_in_path_for(resource)设计,我得到localhost:3000\main。我怎样才能使它只显示localhost:3000如何在登录路径后隐藏控制器名称的url设置?

如果您的遗赠是与Contact模型

的routes.rb相关

authenticated :contact do 
    root :to => "controller#action" 
    end 

    unauthenticated :contact do 
    devise_scope :contact do 
     get "/" => "devise/sessions#new" 
    end 
    end 
+0

但我已经在devise_scope中定义了root用户:user do root to:“devise/sessions#new”end – Cuzox

+0

如果我得到'/'=>“main#index” ,作为:根,但这种混乱制定 – Cuzox

+0

@Cuzox检查我的编辑,这有帮助吗? – Nithin

如果你不介意有一个“脸谱”流量(任何东西之前登录),你可以使用以下:

#config/routes.rb 
root "main#index" 

#app/controllers/main_controller.rb 
class MainController < ApplicationController 
    before_action :authenticate_user! 
end 

您将需要在01改变main_index_path到方法。


着陆

如果你想有一个单独的根路径(着陆页/内容页等),你就可以从Devise使用authenticate :user指令:

#config/routes.rb 
authenticate :user do #-> has to login to see 
    root "main#index", as: :authenticated_root #-> url.com 
end 

unauthenticated :user do #-> if not logged in 
    root "application#landing", as: :root #-> url.com 
    resources :pages, path: "blog" #-> url.com/blog 
end 

以上将让您能够在applicationcontroller中设置“登陆”页面,如果用户未登录,将显示该页面。如果用户通过身份验证,他们将看到main#index当他们浏览到url.com

+1

我当时想要的是什么但是,我最终将'before_action:authenticate_user!'放在'application_controller.rb'而不是'main_controller.rb'上,并且在'routes.rb'上有'root'main#index''' – Cuzox

+0

好的工作,谢谢让我知道 –