Example #1
0
 /// <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);
     }
 }
Example #2
0
        /// <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"));
                }
            }
        }
Example #3
0
        /// <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
            });
        }