基于登录状态拥有两个不同主页的最佳方式



首先,我尝试访问路由中的会话变量。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

最新更新