public virtual async Task SendPhoneSigninCodeAsync(SendPhoneSigninCodeDto input) { var securityTokenCacheKey = SmsSecurityTokenCacheItem.CalculateCacheKey(input.PhoneNumber, "SmsVerifyCode"); var securityTokenCacheItem = await SecurityTokenCache.GetAsync(securityTokenCacheKey); var interval = await SettingProvider.GetAsync(IdentitySettingNames.User.SmsRepetInterval, 1); if (securityTokenCacheItem != null) { throw new UserFriendlyException(L["SendRepeatSmsVerifyCode", interval]); } // 传递 isConfirmed 验证过的用户才允许通过手机登录 var user = await GetUserByPhoneNumberAsync(input.PhoneNumber, isConfirmed : true); var code = await UserManager.GenerateTwoFactorTokenAsync(user, TokenOptions.DefaultPhoneProvider); var template = await SettingProvider.GetOrNullAsync(IdentitySettingNames.User.SmsUserSignin); // 发送登录验证码短信 await SecurityCodeSender.SendPhoneConfirmedCodeAsync(input.PhoneNumber, code, template); // 缓存登录验证码状态,防止同一手机号重复发送 securityTokenCacheItem = new SmsSecurityTokenCacheItem(code, user.SecurityStamp); await SecurityTokenCache .SetAsync(securityTokenCacheKey, securityTokenCacheItem, new DistributedCacheEntryOptions { AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(interval) }); }
public virtual async Task SendPhoneSigninCodeAsync(SendPhoneSigninCodeDto input) { await AccountAppService.SendPhoneSigninCodeAsync(input); }