class ROTP::TOTP

def verify(otp, drift_ahead: 0, drift_behind: 0, after: nil, at: Time.now)

Returns:
  • (Integer, nil) - the last successful timestamp

Parameters:
  • at (Time) -- time at which to generate and verify a particular
  • after (Integer) -- prevent token reuse, last login timestamp
  • drift_ahead (Integer) -- how many seconds to look ahead
  • drift_behind (Integer) -- how many seconds to look back
  • otp (String) -- the one time password to verify
def verify(otp, drift_ahead: 0, drift_behind: 0, after: nil, at: Time.now)
  timecodes = get_timecodes(at, drift_behind, drift_ahead)
  timecodes = timecodes.select { |t| t > timecode(after) } if after
  result = nil
  timecodes.each do |t|
    result = t * interval if super(otp, generate_otp(t))
  end
  result
end