Proof of expiration comparison
這節要證明之前設定的比較密碼重設過期失效的算式是正確的。我們先來定義兩個時間間隔:
- Δtr 表示發送重設密碼郵件經過的時間
- Δte 表示限制的過期失效時間(例如兩小時)
如果郵件發出後,經過的時間比限制的過期失效時間長,表示該次密碼重設請求已失敗。也就是:
10.1
Δtr > Δte.
如果用 tN 表示現在的時間,tr 表示郵件發送的時間,te 表示失效的時間(例如兩小時前),那麼:
10.2
Δtr = tN − tr
10.3
Δte = tN − te.
把 10.2 和 10.3 代入 10.1:
Δtr > Δte
tN − tr > tN − te
−tr > −te,
在這個不等式的兩邊乘以 -1:
10.4
tr < te.
把 te = 2.hours.ago 代入 10.4,就可以得到 password_reset_expired? 方法:
def password_reset_expired?
reset_sent_at < 2.hours.ago
end
之前提過,如果把「<」理解成「超過」而不是「小於」,就可以得到符合人類邏輯的句子:「密碼重設郵件已經發出超過兩小時」。