HTTP 协议没有状态,每个请求都是独立的事务,无法使用之前请求中的信息。所以,在 HTTP 协议中无法 在两个页面之间记住用户的身份。需要用户登录的应用必须使用会话(session)。会话是两台电脑(例如运 行 Web 浏览器的客户端电脑和运行 Rails 的服务器)之间的半永久性连接。在 Rails 中实现会话最常见的方式是使用 cookie。cookie 是存储在用户浏览器中的少量文本。访问其他页面时,cookie 中存储的信息仍在,所以可以在 cookie 中存储一些信息,例如用户的 ID,让应用从数据库中检索 已登录的用户。这一节使用 Rails 提供的 session 方法实现临时会话,浏览器关闭后会话自动失效。
把会话看成 REST 式资源便于操作,访问登录页面时渲染一个用于创建会话的表单,登录时创建会话,退出 时再把会话销毁。
创建 sessions 控制器
1 | rails generate controller Sessions new |
获得会话的标准 REST 式动作
config/routes.rb
1 | Rails.application.routes.draw do |
创建登录表单
app/views/sessions/new.html.erb
1 | <h1>Login</h1> |
编写控制器
app/controllers/application_controller.rb
1 | class ApplicationController < ActionController::Base |
app/controllers/sessions_controller.rb
1 | class SessionsController < ApplicationController |
修改其他布局
1 | <% if logged_in? %> |