/// <summary> /// 用户登录 /// </summary> /// <param name="login"></param> /// <returns></returns> public LoginOutPut UserLogin(LoginModel login) { //验证码合法性验证 int codeID = CodeVerification(login); //登录操作 (或注册) Users user = new Users() { mobile = login.mobile, ifdel = "0" }; //查找该用户 string sqlConditon = SelectSqlGenerate(user, new List <string>() { nameof(user.mobile), nameof(user.ifdel) }); string sql = $"SELECT * FROM users {sqlConditon}"; Users userData = commonDB.QueryFirstOrDefault <Users>(sql, user); if (userData == null) { //注册 RegisterUser(user); //重新查找 userData = commonDB.QueryFirstOrDefault <Users>(sql, user); } //失效验证码 CodeVerificationInvalid(codeID); //转换UserID int id = Convert.ToInt32(userData.userId); string key = CodeVerificationHelper.GenerateLoginKey(id); return(new LoginOutPut() { ifSuccess = true, key = key }); }
/// <summary> /// 发送验证码 /// </summary> /// <param name="code"></param> /// <returns></returns> public bool SendVerificationCode(string mobile) { //系统时间 DateTime dtNow = GetSystemTime(); CodeVerification code = new CodeVerification() { mobile = mobile, failtime = 0, initTime = dtNow, status = "0", type = "0", ifSend = "0" }; //获取验证码有效时间 int effectiveSeconds = int.Parse(GetSystemSet(0).value); //获取验证码发送间隔 int sendIntervalSeconds = int.Parse(GetSystemSet(1).value); //获取最后一次发送的 有效(未使用) 验证码 string sqlCondition = SelectSqlGenerate(code, new List <string>() { nameof(code.mobile), nameof(code.type), nameof(code.status) }); string sql = $"SELECT * FROM code_verification {sqlCondition} ORDER BY initTime DESC"; CodeVerification lastCode = commonDB.QueryFirstOrDefault <CodeVerification>(sql, code); if (lastCode != null && !string.IsNullOrWhiteSpace(lastCode.value)) { //判断是否过期 if (lastCode.initTime.AddSeconds(effectiveSeconds) > dtNow) { lastCode.initTime = dtNow; //没过期 更新验证码有效时间 sqlCondition = UpdateSqlGenerate(lastCode, new List <string>() { nameof(lastCode.initTime) }, new List <string>() { nameof(lastCode.id) }); sql = $"UPDATE code_verification {sqlCondition}"; commonDB.Excute(sql, lastCode); return(true); } else { lastCode.status = "2"; //标记验证码已失效 sqlCondition = UpdateSqlGenerate(lastCode, new List <string>() { nameof(lastCode.status) }, new List <string>() { nameof(lastCode.id) }); sql = $"UPDATE code_verification {sqlCondition}"; commonDB.Excute(sql, lastCode); int needIntervalSeconds = (lastCode.initTime.AddSeconds(sendIntervalSeconds) - dtNow).Seconds; //判断是否达到发送间隔 if (needIntervalSeconds > 0) { throw new VerificationException($"请等待{needIntervalSeconds}秒后重新发送验证码"); } else { //不return 继续生成 } } } ///生成6位values code.value = CodeVerificationHelper.GetVerificationCode(); sqlCondition = InsertSqlGenerate(code, new List <string>() { nameof(code.failtime), nameof(code.initTime), nameof(code.mobile), nameof(code.status), nameof(code.type), nameof(code.value), nameof(code.ifSend) }); sql = $@"INSERT INTO code_verification {sqlCondition}"; return(commonDB.Excute(sql, code) == 1); }