Ejemplo n.º 1
0
        /// <summary>
        /// 生成验证码
        /// </summary>
        /// <param name="mobile">手机号</param>
        /// <param name="type">验证类型</param>
        /// <param name="time">过期时间(分钟)</param>
        /// <returns>JsonResult</returns>
        public JsonResult NewCode(string mobile, int type, int time)
        {
            var verify = General.Verify(mobile + Secret);

            if (!verify.Successful)
            {
                return(verify);
            }

            var record = SmsCodes.OrderByDescending(r => r.CreateTime).FirstOrDefault(r => r.Mobile == mobile && r.Type == type);

            if (record != null && (DateTime.Now - record.CreateTime).TotalSeconds < 60)
            {
                return(verify.TimeTooShort());
            }

            var code = Util.Random.Next(100000, 999999).ToString();

            record = new VerifyRecord
            {
                Type        = type,
                Mobile      = mobile,
                Code        = code,
                FailureTime = DateTime.Now.AddMinutes(time),
                CreateTime  = DateTime.Now
            };
            SmsCodes.Add(record);
            General.LogToLogServer("700501", $"已经为手机号【{mobile}】的用户生成了类型为【{type}】的短信验证码:【{code}】。此验证码将于{record.FailureTime}失效。", "验证服务", "生成短信验证码");
            return(verify.Success(code));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 验证验证码是否正确
        /// </summary>
        /// <param name="mobile">手机号</param>
        /// <param name="code">验证码</param>
        /// <param name="type">验证码类型</param>
        /// <param name="remove">是否验证成功后删除记录</param>
        /// <returns>JsonResult</returns>
        public JsonResult VerifyCode(string mobile, string code, int type, bool remove = true)
        {
            var verify = General.Verify(mobile + Secret);

            if (!verify.Successful)
            {
                return(verify);
            }

            SmsCodes.RemoveAll(c => c.FailureTime < DateTime.Now);
            var record = SmsCodes.FirstOrDefault(c => c.Mobile == mobile && c.Code == code && c.Type == type);

            if (record == null)
            {
                return(verify.SMSCodeError());
            }

            if (!remove)
            {
                return(verify);
            }

            SmsCodes.RemoveAll(c => c.Mobile == mobile && c.Type == type);
            return(verify);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 用户重置登录密码
        /// </summary>
        /// <param name="account">登录账号</param>
        /// <param name="password">新密码</param>
        /// <param name="code">短信验证码</param>
        /// <returns>JsonResult</returns>
        public JsonResult ResetSignature(string account, string password, string code)
        {
            var verify  = new SessionVerify();
            var session = verify.Basis;

            if (session == null)
            {
                return(verify.Result.NotFound());
            }

            var sign = Hash(session.LoginName.ToUpper() + code + password);

            if (verify.Session.Signature != sign)
            {
                return(verify.Result.InvalidAuth());
            }

            // 验证短信验证码
            var mobile = session.LoginName;

            SmsCodes.RemoveAll(c => c.FailureTime < DateTime.Now);
            var record = SmsCodes.FirstOrDefault(c => c.Mobile == mobile && c.Code == code && c.Type == 2);

            if (record == null)
            {
                return(verify.Result.SMSCodeError());
            }

            SmsCodes.RemoveAll(c => c.Mobile == mobile && c.Type == 2);

            // 更新用户登录密码
            var reset = Update(account, password);

            if (reset == null || !reset.Value)
            {
                return(verify.Result.DataBaseError());
            }

            session.Signature = Hash(account.ToUpper() + password);
            return(verify.Result.Success(CreateKey(session)));
        }