/// <summary> /// 发送验证码前检查 /// </summary> /// <param name="input"></param> /// <returns></returns> private async Task PreSendCodeCheck(CodeSendInput input) { if (SettingManager.GetSettingValueForApplication <bool>(AppSettings.SMSManagement.UseCaptchaToVerification)) { await _captchaValidator.ValidateAsync(input.CaptchaResponse); } }
/// <summary> /// 验证手机号码是否有效 /// </summary> /// <param name="input"></param> /// <returns></returns> private async Task CheckPhoneNumVaild(CodeSendInput input) { if (input.CodeType == VerificationCodeType.Register) { var user = await _userStore.Find4PlatformByPhoneNumberAsync(input.TargetNumber); if (user != null) { throw new UserFriendlyException(string.Format(L("Identity.DuplicatePhoneNumber"), input.TargetNumber)); } } else if (input.CodeType == VerificationCodeType.PhoneBinding) { var currentUser = await GetCurrentUserIfLoginAsync(); var user = await _userStore.Find4PlatformByPhoneNumberAsync(input.TargetNumber); //未登录,不能收取手机绑定验证码 if (currentUser == null) { throw new UserFriendlyException(L("Identity.NotLoggedIn")); } if (user != null) { if (user != currentUser) { throw new UserFriendlyException(string.Format(L("Identity.DuplicatePhoneNumber"), input.TargetNumber)); } if (user == currentUser) { throw new UserFriendlyException(string.Format(L("Identity.BindingPhoneNumCanNotEqual"), input.TargetNumber)); } } } else if (input.CodeType == VerificationCodeType.PhoneUnBinding) { var currentUser = await GetCurrentUserIfLoginAsync(); if (currentUser == null || currentUser.PhoneNumber.IsNullOrWhiteSpace()) { throw new UserFriendlyException(string.Format(L("Identity.UnBindingPhoneNum"), input.TargetNumber)); } } else if (input.CodeType == VerificationCodeType.Login) { var user = await _userStore.Find4PlatformByPhoneNumberAsync(input.TargetNumber); if (user == null) { throw new UserFriendlyException(L("Identity.UnRegisterPhoneNumber")); } } }
/// <summary> /// 发送验证码 /// </summary> /// <param name="input"></param> /// <returns></returns> public async Task <SendResult> SendCode(CodeSendInput input) { await PreSendCodeCheck(input); await CheckPhoneNumVaild(input); var verificationCode = await _verificationCodeManager.GetOrSetVerificationCodeAsync(input.TargetNumber, input.CodeType); int tempateId = 0; switch (input.CodeType) { case VerificationCodeType.Register: tempateId = await SettingManager.GetSettingValueAsync <int>(AppSettings.SMSManagement.RegisterVerificationTempId); break; case VerificationCodeType.Login: tempateId = await SettingManager.GetSettingValueAsync <int>(AppSettings.SMSManagement.LoginVerificationTempId); break; case VerificationCodeType.ChangePassword: tempateId = await SettingManager.GetSettingValueAsync <int>(AppSettings.SMSManagement.ChangePasswordVerificationTempId); break; case VerificationCodeType.PhoneVerify: tempateId = await SettingManager.GetSettingValueAsync <int>(AppSettings.SMSManagement.BindingPhoneVerificationTempId); break; case VerificationCodeType.PhoneBinding: tempateId = await SettingManager.GetSettingValueAsync <int>(AppSettings.SMSManagement.BindingPhoneVerificationTempId); break; case VerificationCodeType.PhoneUnBinding: tempateId = await SettingManager.GetSettingValueAsync <int>(AppSettings.SMSManagement.UnBindingPhoneVerificationTempId); break; default: break; } if (tempateId <= 0) { return new SendResult() { Success = false } } ; var template = _smsTemplateManager.GetSMSTemplateResultById(id: tempateId, verificationCode: verificationCode); //return await _smsSender.SendAsync(input.TargetNumber, template, template.SmsProvider); return(new SendResult() { Success = true }); }