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
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
Verifies the OTP passed in against the current time OTP
 and adjacent intervals up to +drift+.  Excludes OTPs
 from `after` and earlier.  Returns time value of
 matching OTP code for use in subsequent call.
 @param otp [String] the one time password to verify
 @param drift_behind [Integer] how many seconds to look back
 @param drift_ahead [Integer] how many seconds to look ahead
 @param after [Integer] prevent token reuse, last login timestamp
 @param at [Time] time at which to generate and verify a particular
   otp. default Time.now
 @return [Integer, nil] the last successful timestamp
   interval