Rails 3 w/Devise:如何根据用户是否经过身份验证设置两个单独的主页?

And*_*lea 8 ruby-on-rails rails-routing devise

我正在使用Rails 3和Devise创建一个应用程序,用户可以访问该网站并显示包含登录和注册表单的主页.这个页面有自己的控制器("主页"),所以它的路线是

root :to => "homepage#index"
Run Code Online (Sandbox Code Playgroud)

如果用户已经登录,我想显示不同的主页.这将考虑到根点

root :to => "dashboard#index"
Run Code Online (Sandbox Code Playgroud)

有没有办法在routes.rb中设置条件路由,这样我就可以在将用户路由到其中一个主页之前检查用户是否经过身份验证?

我尝试使用以下代码,但如果我没有登录,设计要求我登录,所以显然只有第一条路线有效.

authenticate :user do
  root :to => "dashboard#index"
end
  root :to => "homepage#index"
Run Code Online (Sandbox Code Playgroud)

此外,我希望网址在两种情况下都指向www.example.com,以便www.example.com/dashboard/index和www.example.com/homepage/index永远不会出现在浏览器中.

太感谢了 !!!

Bra*_*est 13

试试这个,它特定于Warden/Devise.

root to: "dashboard#index", constraints: lambda { |r| r.env["warden"].authenticate? }
root to: "homepage#index"
Run Code Online (Sandbox Code Playgroud)

  • 编辑:使用Rails 4时,您只需为路径添加一个不同的名称即可. (2认同)

Nic*_*nil 5

在您的HomeController中:

def index
  if !user_signed_in?
    redirect_to :controller=>'dashboard', :action => 'index'
  end
end
Run Code Online (Sandbox Code Playgroud)