我无法理解如何制作遵循以下方案的 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 有new
、create
和destroy
方法。
我特别卡在我不知道将登录表格发送到哪里 - 我认为它应该以sessions#new
某种方式指向,但我真的不明白它是如何工作的。
谢谢。