/// <summary> /// 是否使用验证码 /// </summary> /// <param name="scenarios">验证码使用场景</param> /// <param name="isLimitCount">是否限制次数</param> /// <returns></returns> public static bool UseCaptcha(VerifyScenarios scenarios = VerifyScenarios.Login,bool isLimitCount = false) { CaptchaSetting captchaSetting = CaptchaSetting.Instance(); if (!captchaSetting.EnableCaptcha) return false; return false; }
/// <summary> /// 重置使用验证码前尝试次数 /// </summary> /// <param name="userName">用户名</param> public static void ResetLimitTryCount(VerifyScenarios scenarios) { string cacheKey = GetCacheKey_LimitTryCount(GetUserName(), scenarios); int? limitTryCount = cacheService.Get(cacheKey) as int?; if (limitTryCount.HasValue) cacheService.Remove(cacheKey); }
/// <summary> /// 是否开始使用验证码 /// </summary> /// <param name="userName">用户名</param> /// <param name="scenarios">验证码使用场景</param> /// <returns></returns> public static bool UseCaptcha(VerifyScenarios scenarios = VerifyScenarios.Post, bool isLimitCount = false) { CaptchaSettings verificationCodeSettings = CaptchaSettings.Instance(); if (!verificationCodeSettings.EnableCaptcha) { return(false); } IUser currentUser = UserContext.CurrentUser; if (scenarios == VerifyScenarios.Register || currentUser == null && scenarios == VerifyScenarios.Post) { return(true); } //后台登陆 if (scenarios == VerifyScenarios.Login && currentUser != null) { return(true); } if (currentUser == null && scenarios == VerifyScenarios.Post && verificationCodeSettings.EnableAnonymousCaptcha) { return(true); } string userName = GetUserName(); if (scenarios == VerifyScenarios.Login && UserIdToUserNameDictionary.GetUserId(userName) == 0) { return(false); } string cacheKey = GetCacheKey_LimitTryCount(userName, scenarios); int? limitTryCount = cacheService.Get(cacheKey) as int?; if (limitTryCount.HasValue && ((scenarios == VerifyScenarios.Login && limitTryCount >= verificationCodeSettings.CaptchaLoginCount) || (scenarios == VerifyScenarios.Post && limitTryCount >= verificationCodeSettings.CaptchaPostCount))) { return(true); } if (isLimitCount) { if (limitTryCount.HasValue) { limitTryCount++; } else { limitTryCount = 1; } cacheService.Set(cacheKey, limitTryCount, CachingExpirationType.SingleObject); } return(false); }
/// <summary> /// 是否开始使用验证码 /// </summary> /// <returns></returns> public static bool UseCaptcha(VerifyScenarios scenarios = VerifyScenarios.Post, bool isLimitCount = false) { //验证码配置类获取配置是否启用验证码 var catchaSettings = CaptchaSettings.Instance(); if (!catchaSettings.EnableCaptcha) { return(false); } int? limitTryCount = null; User currentUser = UserContext.CurrentUser; if (scenarios == VerifyScenarios.Register) { return(true); } if (scenarios == VerifyScenarios.Login && currentUser != null) { return(true); } string userName = GetUserName(HttpContextCore.Current); string cacheKey = GetLimitTryCount(userName, scenarios); limitTryCount = cacheService.Get(cacheKey) as int?; //登录的时候输错三次密码,就使用验证码 if (limitTryCount.HasValue && ((scenarios == VerifyScenarios.Login && limitTryCount >= catchaSettings.CaptchaLoginCount))) { return(true); } //是否累计次数 if (isLimitCount) { if (limitTryCount.HasValue) { limitTryCount++; } else { limitTryCount = 1; } if (limitTryCount == 1) { cacheService.Add(cacheKey, limitTryCount, CachingExpirationType.SingleObject); } else { cacheService.Set(cacheKey, limitTryCount, CachingExpirationType.SingleObject); } } return(false); }
/// <summary> /// 重置使用验证码前尝试次数 /// </summary> /// <param name="userName">用户名</param> public static void ResetLimitTryCount(VerifyScenarios scenarios) { string cacheKey = GetCacheKey_LimitTryCount(GetUserName(), scenarios); int? limitTryCount = cacheService.Get(cacheKey) as int?; if (limitTryCount.HasValue) { cacheService.Remove(cacheKey); } }
/// <summary> /// 重置累计次数,具体是否使用按上面规则实施 /// </summary> public static void ResetLimitTryCount(VerifyScenarios scenarios) { var httpContext = HttpContextCore.Current; string cacheKey = GetLimitTryCount(GetUserName(httpContext), scenarios); int? limitTryCount = cacheService.Get(cacheKey) as int?; if (limitTryCount.HasValue) { cacheService.Remove(cacheKey); } }
public static IHtmlContent Captcha <T>(this IHtmlHelper <T> htmlHelper, VerifyScenarios scenarios = VerifyScenarios.Post, bool showCaptchaImage = false, string templateName = "Captcha") { if (!CaptchaUtility.UseCaptcha(scenarios)) { return(HtmlString.Empty); } ICaptchaManager captchaManager = DIContainer.Resolve <ICaptchaManager>(); IHtmlContent captchaText = captchaManager.GenerateCaptcha(htmlHelper, showCaptchaImage); return(htmlHelper.EditorForModel(templateName, new { CaptchaText = captchaText })); }
/// <summary> /// 是否开始使用验证码 /// </summary> /// <param name="userName">用户名</param> /// <param name="scenarios">验证码使用场景</param> /// <returns></returns> public static bool UseCaptcha(VerifyScenarios scenarios = VerifyScenarios.Post, bool isLimitCount = false) { CaptchaSettings verificationCodeSettings = CaptchaSettings.Instance(); if (!verificationCodeSettings.EnableCaptcha) return false; IUser currentUser = UserContext.CurrentUser; if (scenarios == VerifyScenarios.Register || currentUser == null && scenarios == VerifyScenarios.Post) return true; //后台登陆 if (scenarios == VerifyScenarios.Login && currentUser != null) return true; if (currentUser == null && scenarios == VerifyScenarios.Post && verificationCodeSettings.EnableAnonymousCaptcha) return true; string userName = GetUserName(); if (scenarios == VerifyScenarios.Login && UserIdToUserNameDictionary.GetUserId(userName) == 0) return false; string cacheKey = GetCacheKey_LimitTryCount(userName, scenarios); int? limitTryCount = cacheService.Get(cacheKey) as int?; if (limitTryCount.HasValue && ((scenarios == VerifyScenarios.Login && limitTryCount >= verificationCodeSettings.CaptchaLoginCount) || (scenarios == VerifyScenarios.Post && limitTryCount >= verificationCodeSettings.CaptchaPostCount))) return true; if (isLimitCount) { if (limitTryCount.HasValue) { limitTryCount++; } else { limitTryCount = 1; } cacheService.Set(cacheKey, limitTryCount, CachingExpirationType.SingleObject); } return false; }
/// <summary> ///尝试次数统计的CacheKey /// </summary> private static string GetCacheKey_LimitTryCount(string userName, VerifyScenarios scenarios) { return string.Format("LimitTryCount::UserName-{0}:Scenarios-{1}", userName, scenarios); }
/// <summary> ///尝试次数统计的CacheKey /// </summary> private static string GetCacheKey_LimitTryCount(string userName, VerifyScenarios scenarios) { return(string.Format("LimitTryCount::UserName-{0}:Scenarios-{1}", userName, scenarios)); }
public CaptchaAttribute(VerifyScenarios _scenarios = VerifyScenarios.Login) { scenarios = _scenarios; }
/// <summary> /// 带参构造器 /// </summary> /// <param name="scenarios">验证码使用场景</param> public CaptchaVerifyAttribute(VerifyScenarios scenarios = VerifyScenarios.Post) { this.scenarios = scenarios; }