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;}
经验总结扩展阅读
- 怎么关心男朋友
- 霸气又有女神范的句子 女性风采赞美的句子
- 可处置的 ref 结构 C# 8.0 中的 Disposable ref structs
- 朋友圈评价女人漂亮经典语句 赞美女人漂亮的短句幽默
- 赞美香车美女的句子 形容美女和车的句子
- 赞美女人的优美句子 评价女人身材好的句子
- 《HelloGitHub》第 79 期
- 开车顺口溜句子搞笑的 形容开破车的句子
- 夸女人的美言佳句 评价女人漂亮经典语句
- 5 Java多线程:CAS