10.6 证明超时失效的比较算式

本节我们要证明 10.2.4 节比较密码重设超时失效的算式是正确的。我们先来定义两个时间间隔:表示发送密码重设邮件后经过的时间,表示限制的失效时长(例如两个小时)。如果邮件发出后经过的时间比限制的失效时长长,说明此次密码重设请求已经失效,即:

如果用 表示现在的时间,表示发送邮件的时间,表示失效的时间(例如两个小时以前),那么:

把这两个等式代入第一个算式:

在这个不等式的两边乘于 -1 后得到:

把 = 2.hours.ago 代入这个不等式后就能得到代码清单 10.53 中的 password_reset_expired? 方法:

def password_reset_expired?
  reset_sent_at < 2.hours.ago
end

10.2.4 节说过,如果把 &lt; 理解成“超过”而不是“小于号”的话,就能得到一个符合人类逻辑的句子:“密码重设邮件已经发出超过两小时”。