public static void Verify(ComputedValueVerifier verifier, SystemPlatform plateForm, string uniqueKey, string secretKey, string code, bool codeCanVerifyAgain = false) { var errorCountKey = verifier.GetErrorCountKey(plateForm, uniqueKey); int errorCount = CheckErrorCount(verifier, errorCountKey); if (!CheckCodeValid(verifier, plateForm, uniqueKey, code)) { verifier.VerifyInvalidCode(); } var result = verifier.Verify(secretKey, code); if (result) { if (errorCount > 0) { DeleteErrorCount(errorCountKey); } if (!codeCanVerifyAgain) { InvalidateCode(verifier, plateForm, uniqueKey, code); } } else { IncreaseErrorCount(verifier, errorCountKey); } }
public static void InvalidateCode(ComputedValueVerifier verifier, SystemPlatform plateForm, string uniqueKey, string code) { RedisHelper.StringSet(RedisDBIndex, verifier.GetBeUsedKey(plateForm, uniqueKey, code), "1", TimeSpan.FromMinutes(verifier.GetExpireTime())); }
///// <summary> ///// 使验证码无效 ///// </summary> ///// <typeparam name="T">验证类</typeparam> ///// <param name="plateForm">系统</param> ///// <param name="business">业务</param> ///// <param name="uniqueKey">唯一标志</param> ///// <param name="code">验证码,计算类型的验证类必传</param> //public static void InvalidateCode<T>(SystemPlatform plateForm, FiiipayBusiness business, string uniqueKey, string code) where T : AbstractVerifier, new() //{ // var verifier = new T(); // InvalidateCode(verifier, plateForm, business, uniqueKey, code); //} /// <summary> /// 检查验证码是否有效(已经成功验证则无效) /// </summary> /// <param name="plateForm">系统</param> /// <param name="uniqueKey">唯一标志</param> /// <param name="code">验证码,计算类型的验证类必传</param> /// <returns></returns> public static bool CheckCodeValid(ComputedValueVerifier verifier, SystemPlatform plateForm, string uniqueKey, string code) { string invalidCodeKey = verifier.GetBeUsedKey(plateForm, uniqueKey, code); return(!RedisHelper.KeyExists(RedisDBIndex, invalidCodeKey)); }