名为 Carly 的用户未注册并到达索引页面。她注册并自动重定向到主仪表板页面。现在名为 CarlyCoolness123 的用户 Carly 关闭了她的浏览器并去吃晚饭。她再次打开她的 PC,但这一次她只记得实际的索引页面名为:coolness.com,而不是 coolness.com/index-dashboard。如果用户登录,我希望此用户自动重定向到仪表板页面。这意味着如果用户登录,用户将无法访问索引页面。我该怎么做?我已经尝试了几件事,但是由于我认为你们这里的人对此比我有更好的理解,所以我认为我的错误不需要在这里包括在内。
3 回答
这假设您已经正确设置了设计,并且您有一个负责呈现仪表板视图的仪表板控制器。在您的 app/controllers/dashboard_controller.rb 中执行以下操作:
class DashboardController < ApplicationController
before_filter :authenticate_user!
...
end
然后在您的 config/routes.rb 文件中添加以下内容:
resources :dashboard
authenticated :user do
root :to => "dashboard#index"
end
root :to => redirect("/users/sign_in")
如果您有仪表板的索引视图,则访问应用程序的根目录应该会自动呈现它(如果用户已登录)。如果用户未登录,它将重定向到设计默认登录视图(如果您尚未重新定义它)
我更喜欢使用下面的方法,因为拥有多个根路径对我来说似乎违反直觉[阅读:“当我尝试其他提到的方法时出现错误,所以我尝试了其他方法。”]。
我认为这效果更好,实际上是@MFCS 最初要求的,因为它不会有条件地在其他地方提出根点。而是在登录用户访问时重定向到不同的路径root_path
:
配置/路由.rb:
root to: 'welcome#index'
应用程序/控制器/welcome_controller.rb:
class WelcomeController < ApplicationController
def index
if user_signed_in?
redirect_to dashboard_path
end
end
end
我更喜欢这个,因为仪表板仍然会在浏览器中显示仪表板 url(而不是根 url),尽管这可能不是其他人的偏好,并且还取决于您首选的用户体验。
编辑:我在代码中犯了一个错误,引用了 DashboardController 而不是根资源的控制器。
虽然这是一篇旧帖子,但我遇到了类似的问题,因为我没有使用设计并使用 bcrypt,所以这就是解决方案。current_user
我在我的应用程序控制器中定义了 a和authorize
.
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
helper_method :current_user
def authorize
redirect_to 'home/index' unless current_user
end
然后我将所有人路由到他们的安全仪表板并在过滤所有安全控制器之前运行before_filter :authorize
,然后如果他们失败,他们将被路由到主页。希望这对将来的人有所帮助!