Ejemplo n.º 1
0
        /// <summary>
        /// 验证手机号码和短信是否符合验证规则
        /// </summary>
        /// <param name="phoneNumber">需要验证手机号</param>
        /// <param name="verifyCode">需要验证的验证码</param>
        /// <param name="failBussiness">验证失败处理</param>
        /// <param name="successBussiness">验证成功处理</param>
        /// <param name="errorMessage">错误信息</param>
        /// <returns></returns>
        public bool IsSMSVerifyCode(string phoneNumber, string verifyCode, Action <string> failBussiness, Action successBussiness, out string errorMessage)
        {
            var ret = false;

            errorMessage = LoginMessage.MobilePhoneCodeError;

            // 账户被锁定
            var currentTime = DateTime.Now;

            if (currentTime <= verifyMode.UnableTime)
            {
                errorMessage = ComputeRemainUnableMinute(currentTime, verifyMode.UnableTime);
                return(false);
            }
            if (verifyMode.FailNumber == -1)
            {
                verifyMode.FailNumber = 1;
                return(false);
            }

            // 禁用用户时间范围内
            if (DateTime.Compare(DateTime.Now, verifyMode.UnableTime) < 0)
            {
                string clientIP = WebHelper.GetClientIP();
                if (clientIP.EqualsOrdinalIgnoreCase(verifyMode.RequestIP) || verifyMode.PhoneNumber.EqualsOrdinalIgnoreCase(phoneNumber))
                {
                    //  属于阻止IP
                    return(false);
                }
            }
            else
            {
                if (verifyMode.PhoneNumber.EqualsOrdinalIgnoreCase(phoneNumber) && verifyMode.SMSVerifyNumber.EqualsOrdinalIgnoreCase(verifyCode) &&
                    DateTime.Compare(DateTime.Now.AddMinutes(-ableMinutes), verifyMode.InitSMSVerifyTime) < 0)
                {
                    //verifyMode = InitMobileVerifyMode(phoneNumber);
                    _session.Remove(smsVerifySessionKey);
                    successBussiness();
                    ret = true;
                }
                else
                {
                    //  失败次数大于允许次数
                    if ((verifyMode.FailNumber += 1) >= FAILCOUNT)
                    {
                        verifyMode.FailNumber      = -1;
                        verifyMode.SMSVerifyNumber = Rand.CreatePhoneCode(verifyLen);
                        verifyMode.UnableTime      = DateTime.Now.AddMinutes(UnableMinutes);
                        _session.Set(smsVerifySessionKey, verifyMode, UnableMinutes);
                        failBussiness(phoneNumber);
                        errorMessage = ComputeRemainUnableMinute(DateTime.Now, verifyMode.UnableTime);
                    }
                }
            }
            if (ret)
            {
                errorMessage = string.Empty;
            }
            return(ret);
        }
Ejemplo n.º 2
0
        private MobileVerifyMode InitMobileVerifyMode(string phoneNumber = "")
        {
            var now = DateTime.Now;
            var mobileVerifyMode = new MobileVerifyMode
            {
                PhoneNumber       = phoneNumber,
                SMSVerifyNumber   = Rand.CreatePhoneCode(verifyLen),
                InitSMSVerifyTime = now,
                LastSendTime      = now.AddMinutes(-RANGE),
                FailNumber        = -1,
                RequestIP         = WebHelper.GetClientIP()
            };

            _session.Set(smsVerifySessionKey, mobileVerifyMode, ableMinutes);
            return(mobileVerifyMode);
        }