17 基于SqlSugar的开发框架循序渐进介绍-- 基于CSRedis实现缓存的处理( 二 )

WebAPI后端 , 处理逻辑是构建随机的验证码并通过短信发送到手机上 , 并缓存好对应的验证码 , 后端的处理代码如下所示
/// <summary>/// 发送登录动态码/// </summary>/// <param name="model"></param>/// <returns></returns>[AllowAnonymous][HttpPost][Route("send-login-smscode")]public async Task<CommonResult> SendPhoneLoginSmsCode(PhoneCaptchaModel model){    //获取随机6位数字动态验证码    var code = RandomChinese.GetRandomNumber(6);    //使用自定义模板处理短信发送    string message = string.Format(ConfigData.MySmsCodeTemplate, code);    var result = await _smsSender.SendAsync(model.PhoneNumber, message);    if (result.Success)    {        var cacheKey = model.PhoneNumber;//以手机号码作为键存储验证码缓存        var cacheItem = new SmsLoginCodeCacheItem { Code = code, PhoneNumber = model.PhoneNumber };RedisHelper.Set(cacheKey, cacheItem, TimeSpan.FromMinutes(ConfigData.SmsCodeExpiredMinutes));        //获取的时候        //var tmp = RedisHelper.Get<SmsLoginCodeCacheItem>(cacheKey);    }    return result;}顺利发送短信验证码后 , 前端会提示用户验证码发送情况 , 并要求输入验证码进行登录 , 前端登录的代码如下所示 。
//短信验证码登录loginByCode() {    var params = {        mobile: this.model.mobile,        smscode: this.model.code    };    console.log(params);    user.dynamiclogin(params)        .then(res => {            uni.$u.toast('验证成功');            this.gotoPage();        })        .catch(error => {            console.log('验证失败' + error);            uni.$u.toast(error);        });},后端的登录处理 , 主要就是通过在Redis中读取对应的手机验证码 , 如果匹配进行令牌的生成处理 , 否则提示错误信息 。
/// <summary>/// 登录授权处理/// </summary>/// <returns></returns>[AllowAnonymous][HttpPost][Route("authenticate-byphone")]public async Task<AuthenticateResultDto> AuthenticateByPhoneCaptcha(PhoneCaptchaModel model){    var authResult = new AuthenticateResultDto();    #region 条件检查    if (string.IsNullOrEmpty(model.PhoneNumber))    {        throw new MyApiException("手机号不能为空");    }    if (string.IsNullOrEmpty(model.SmsCode))    {        throw new MyApiException("验证码不能为空");    }    var userInfo = await _userService.GetFirstAsync(s => s.MobilePhone == model.PhoneNumber);    if (userInfo == null)    {        throw new MyApiException("用户手机不存在");    }    #endregion    var cacheKey = model.PhoneNumber;//以手机号码作为键存储验证码缓存    var item = RedisHelper.Get<SmsLoginCodeCacheItem>(cacheKey);    if (item != null && item.Code == model.SmsCode)    {        //根据用户身份生成tokenresult        authResult.AccessToken = GenerateToken(userInfo); //令牌        authResult.Expires = expiredDays * 24 * 3600; //失效秒数        authResult.Success = true;//成功        authResult.UserId = userInfo.Id;//当前用户Id        //移除缓存短信键值        RedisHelper.Del(cacheKey);    }    else    {        authResult.Error = "登录失败 , 无法生成令牌";    }    return authResult;}

经验总结扩展阅读