我希望signed_in用户的root_path
为dashboard
,而未登录用户的用户为index
。
我正在使用Devise,我知道有一个助手user_signed_in?
,但我不明白如何将它用于此目的。
我如何使这项工作?
答案 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