/// <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);
 }
Exemple #3
0
        /// <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);
        }
Exemple #5
0
        /// <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);
            }
        }
Exemple #7
0
        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);
 }
Exemple #10
0
 /// <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;
 }
Exemple #12
0
 /// <summary>
 /// 带参构造器
 /// </summary>
 /// <param name="scenarios">验证码使用场景</param>
 public CaptchaVerifyAttribute(VerifyScenarios scenarios = VerifyScenarios.Post)
 {
     this.scenarios = scenarios;
 }
 /// <summary>
 /// 带参构造器
 /// </summary>
 /// <param name="scenarios">验证码使用场景</param>
 public CaptchaVerifyAttribute(VerifyScenarios scenarios = VerifyScenarios.Post)
 {
     this.scenarios = scenarios;
 }