Proof of expiration comparison

這節要證明之前設定的比較密碼重設過期失效的算式是正確的。我們先來定義兩個時間間隔:

  • Δtr 表示發送重設密碼郵件經過的時間
  • Δte 表示限制的過期失效時間(例如兩小時)

如果郵件發出後,經過的時間比限制的過期失效時間長,表示該次密碼重設請求已失敗。也就是:

10.1

Δtr > Δte.

如果用 tN 表示現在的時間,tr 表示郵件發送的時間,te 表示失效的時間(例如兩小時前),那麼:

10.2

Δtr = tN − tr

10.3

Δte = tN − te.

10.210.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

之前提過,如果把「<」理解成「超過」而不是「小於」,就可以得到符合人類邏輯的句子:「密碼重設郵件已經發出超過兩小時」。