public virtual async Task RegisterAsync(PhoneRegisterDto input) { await CheckSelfRegistrationAsync(); await IdentityOptions.SetAsync(); await CheckNewUserPhoneNumberNotBeUsedAsync(input.PhoneNumber); var securityTokenCacheKey = SmsSecurityTokenCacheItem.CalculateCacheKey(input.PhoneNumber, "SmsVerifyCode"); var securityTokenCacheItem = await SecurityTokenCache.GetAsync(securityTokenCacheKey); if (securityTokenCacheItem == null) { // 验证码过期 throw new UserFriendlyException(L["InvalidSmsVerifyCode"]); } // 验证码是否有效 if (input.Code.Equals(securityTokenCacheItem.Token) && int.TryParse(input.Code, out int token)) { var securityToken = Encoding.Unicode.GetBytes(securityTokenCacheItem.SecurityToken); // 校验totp验证码 if (TotpService.ValidateCode(securityToken, token, securityTokenCacheKey)) { var userEmail = input.EmailAddress ?? $"{input.PhoneNumber}@{CurrentTenant.Name ?? "default"}.io";//如果邮件地址不验证,随意写入一个 var userName = input.UserName ?? input.PhoneNumber; var user = new IdentityUser(GuidGenerator.Create(), userName, userEmail, CurrentTenant.Id) { Name = input.Name ?? input.PhoneNumber }; await UserStore.SetPhoneNumberAsync(user, input.PhoneNumber); await UserStore.SetPhoneNumberConfirmedAsync(user, true); (await UserManager.CreateAsync(user, input.Password)).CheckErrors(); (await UserManager.AddDefaultRolesAsync(user)).CheckErrors(); await SecurityTokenCache.RemoveAsync(securityTokenCacheKey); await CurrentUnitOfWork.SaveChangesAsync(); return; } } // 验证码无效 throw new UserFriendlyException(L["InvalidSmsVerifyCode"]); }
public virtual async Task RegisterAsync(PhoneRegisterDto input) { await AccountAppService.RegisterAsync(input); }