本节我们要证明 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 节说过,如果把 <
理解成“超过”而不是“小于号”的话,就能得到一个符合人类逻辑的句子:“密码重设邮件已经发出超过两小时”。