Rails设计 - 为登录的用户和匿名用户定义单独的根路径

时间:2016-05-21 21:56:26

标签: ruby-on-rails ruby devise

我希望signed_in用户的root_pathdashboard,而未登录用户的用户为index

我正在使用Devise,我知道有一个助手user_signed_in?,但我不明白如何将它用于此目的。

我如何使这项工作?

2 个答案:

答案 0 :(得分:2)

您可以使用:

unauthenticated :user do
  root :to => 'main#index'
end

authenticated :user do
  # Rails 3 syntax
  # root :to => "main#dashboard"   
  # Rails 4 requires the 'as' option to give it a unique name
  root :to => "main#dashboard", :as => "authenticated_root"
end

这是Devise为重新认证用户提供的机制。

root :to => 'main#index'行是Rails在首次创建应用程序时放置在config/routes.rb中的标准行。您可以将其包装在unauthenticated :user do .. end块中,以确保它适用于未登录的用户。

根据用户是否已登录,这为所有用户提供了明确的根路由。

答案 1 :(得分:1)

您可以在应用程序控制器(application_controller.rb

中执行以下操作
protected
def authenticate_user!
if user_signed_in?
  # navigate the user to dashboard
else
  # redirect to index
end

然后可以使用before_filter从其他控制器调用此方法 例如:

class SomeController < ApplicationController
  before_filter :authenticate_user!
end