首先,我尝试访问路由中的会话变量。Rb文件并放入一个简单的if语句。如果用户已登录,则转到入口#index,否则转到登陆#index。然而,路线。Rb似乎没有访问会话变量。我已经设置了会话[:user_id],可以使用它来验证登录状态。最好将注销页面设置为路由中的主页。然后在控制器中重定向如果用户登录了或者有更好的方法,我不知道?
这是我在控制器中为注销用户主页所做的操作。
def index
if User.find_by_id(session[:user_id])
redirect_to entry_url
end
end
它工作得很好,但不确定是否有任何问题与此或更好的方式。
路由实际上可以访问会话变量。您可以设置约束,将登录用户路由到不同的根目录,如下所示:
# Logged in
constraints lambda { |req| !req.session[:user_id].blank? } do
root :to => "entry#index", :as => "dashboard"
end
# Not logged in
root :to => "landing#index"
需要注意两点:首先,顺序很重要;第二,约束可以重构成一行路由,除非您打算进一步使用约束(我总是这样做)。
它当然应该由你的控制器来处理,而不是由你的路由来处理。
def index
@user = User.find_by_id(session[:user_id])
if @user
redirect_to entry_url
else
redirect_to landing_url
end
end