设计 - 如果已登录,则自动从根URL重定向

MFC*_*FCS 9 url redirect ruby-on-rails root devise

名为Carly的用户未注册并到达索引页面.她注册并自动重定向到主仪表板页面.现在名为CarlyCoolness123的用户Carly关闭了她的浏览器并去吃晚餐.她再次登上她的电脑,但这一次,因为她只记得实际的索引页面:coolness.com,而不是coolness.com/index-dashboard.如果用户已登录,我希望此用户自动重定向到仪表板页面.这意味着如果用户已登录,则用户无法访问索引页.如何执行此操作?我尝试了几件事,但是因为我认为你们这里的人比我更了解这个我认为我的错误不需要包含在这里.

pes*_*ira 10

这假定您已正确设置Devise并且您有一个负责呈现仪表板视图的仪表板控制器.在你的app/controllers/dashboard_controller.rb中执行以下操作:

class DashboardController < ApplicationController
  before_filter :authenticate_user!

...
end
Run Code Online (Sandbox Code Playgroud)

然后在config/routes.rb文件中添加以下内容:

resources :dashboard

authenticated :user do
  root :to => "dashboard#index"
end

root :to => redirect("/users/sign_in")
Run Code Online (Sandbox Code Playgroud)

如果您有仪表板的索引视图,则访问应用程序的根目录应自动呈现它(如果用户已登录).如果用户未登录,则会重定向以设计默认的sign_in视图(如果您尚未重新定义)


jpa*_*eri 6

我更喜欢使用下面的方法,因为我有多个根路径似乎违反直觉[读:"当我尝试其他提到的方法时,我得到了一个错误,所以我尝试了别的东西."].

我认为这样做效果更好,实际上是@MFCS最初提出的问题,因为它没有在其他地方有条件地使根点.而是在登录用户访问时重定向到不同的路径root_path:

配置/ routes.rb文件:

root to: 'welcome#index'
Run Code Online (Sandbox Code Playgroud)

应用程序/控制器/ welcome_controller.rb:

class WelcomeController < ApplicationController
  def index
    if user_signed_in?
      redirect_to dashboard_path
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我更喜欢这个,因为仪表板仍然会在浏览器中显示仪表板URL(而不是根URL),尽管这可能不是其他人的偏好,也取决于您的首选用户体验.

编辑:我在代码中犯了一个错误,引用了DashboardController而不是root资源的控制器.