0

我无法理解如何制作遵循以下方案的 Rails 应用程序:

该站点主要由要求用户进行身份验证的“受保护”内部路径组成,此外还有一两个不受保护的“静态”页面和一个直接从“/”(root_path)提供的登录页面。

我希望用户通常遵循他们通过访问登录的流程,root_path并且在未经身份验证的情况下访问受保护页面的任何尝试都会将他们发送回root_path。当用户在 中登录表单时root_path,他们会被发送到home_path(即使他们是root_path通过其他页面的保护被发送到的 - 即,没有智能转发。我可能会在稍后添加。)

此外,在已通过身份验证的情况下尝试浏览root_path应立即将请求转发到home_path. home_path的页面将包含一个注销链接,其效果应立即将用户发送到root_path

我的问题:

routes.rb 条目会是什么样子来设置它?假设我有一个Users控制器和一个Sessions控制器,并假设我已经有命令行身份验证(通过 irb 控制台)工作,那么让这个系统工作的路由和控制器方法的正确组合是什么?我很困惑!


万一它有帮助,这是我到目前为止所拥有的,但我迷失了,我什至无法将其置于工作状态来测试它。

我有一个看起来像这样的路由文件:

MyAppRails::Application.routes.draw do
  resources :sessions, only: [:new, :create, :destroy]

  root to: "sessions#new"
  match '/signout', to: 'sessions#destroy', via: :delete
  match "/home" => 'users#home'
end

UsersController 只有一个home方法,而 SessionsController 有newcreatedestroy方法。

我特别卡在我不知道将登录表格发送到哪里 - 我认为它应该以sessions#new某种方式指向,但我真的不明白它是如何工作的。

谢谢。

4

1 回答 1

1

您不需要更改路由,因为before_filter应该将 a 放置在要限制对登录用户的访问的每个控制器中。可以调用一个:login_required方法来检查用户是否登录,否则,将他们重定向到您的公共页面。

通常,我将根作为单独的控制器、site_controller 或类似的东西。我还创建了我的登录路径sessions#new并使用我的before_filter方法来管理重定向未登录的客人。

这个线程可以帮助你。

于 2012-06-12T21:19:13.257 回答