public async Task <RegisterOutput> Register(RegisterInput input) { // 检查验证码 await CaptchaHelper.CheckVerificationCode( this._cacheManager, this.SettingManager, CaptchaType.TenantUserRegister, input.UserName, input.VerificationCode, AbpSession.TenantId); //// 判断如果是第三方注册进来 //if (!string.IsNullOrEmpty(input.AuthProvider)) //{ // // 判断该账号 已经存在过 // var userLogins = await _userManager.FindByLoginAsync(input.AuthProvider, input.ProviderKey); // if (userLogins != null) // { // throw new UserFriendlyException($"该{input.AuthProvider} 已注册!"); // } //} var user = await _userRegistrationManager.RegisterAsync( input.UserName, input.EmailAddress, input.UserName, input.Password, true // Assumed email address is always confirmed. Change this if you want to implement email confirmation. ); if (!string.IsNullOrEmpty(input.AuthProvider)) { await _userManager.AddLoginAsync(user, new UserLoginInfo(input.AuthProvider, input.ProviderKey, input.AuthProvider)); } var isEmailConfirmationRequiredForLogin = await SettingManager.GetSettingValueAsync <bool>(AbpZeroSettingNames.UserManagement .IsEmailConfirmationRequiredForLogin); return(new RegisterOutput { // 是否可以登陆 1、用户已激活 并且 2、用户邮箱已确认或未启用邮箱校验 并且 3、没有启用登陆验证码 CanLogin = user.IsActive && (user.IsEmailConfirmed || !isEmailConfirmationRequiredForLogin) }); }
/// <summary> /// 注册租户信息 /// </summary> /// <param name="input"></param> /// <returns></returns> public async Task <RegisterTenantResultDto> RegisterTenantAsync(CreateTenantDto input) { // 检查验证码 await CaptchaHelper.CheckVerificationCode( this._cacheManager, this.SettingManager, CaptchaType.HostTenantRegister, input.TenancyName, input.VerificationCode); //创建租户信息 var tenant = new Tenant(input.TenancyName, input.Name) { // 激活根据系统配置 IsActive = await SettingManager.GetSettingValueAsync <bool>(AppSettingNames.HostSettings.AllowSelfRegistration) }; tenant.ConnectionString = input.ConnectionString.IsNullOrEmpty() ? null : SimpleStringCipher.Instance.Encrypt(input.ConnectionString); Abp.Application.Editions.Edition defaultEdition = await _editionManager.FindByNameAsync(EditionManager.DefaultEditionName); if (defaultEdition != null) { tenant.EditionId = defaultEdition.Id; } await TenantManager.CreateAsync(tenant); // 保存以获取新租户的Id await CurrentUnitOfWork.SaveChangesAsync(); // 创建租户数据库 _abpZeroDbMigrator.CreateOrMigrateForTenant(tenant); //创建成功后,需要设置当前工作单元为当前登录后的租户信息 using (CurrentUnitOfWork.SetTenantId(tenant.Id)) { // 给新租户创建角色 CheckErrors(await _roleManager.CreateStaticRoles(tenant.Id)); // 保存,获取角色id await CurrentUnitOfWork.SaveChangesAsync(); // 分配权限 Role adminRole = _roleManager.Roles.Single(r => r.Name == StaticRoleNames.Tenants.Admin); await _roleManager.GrantAllPermissionsAsync(adminRole); // 创建此租户的管理员用户 var adminUser = User.CreateTenantAdminUser(tenant.Id, input.AdminEmailAddress, input.UserName); // 如果没有提交密码,那么走的是默认密码 bb123456 adminUser.Password = _passwordHasher.HashPassword(adminUser, input.TenantAdminPassword.IsNullOrWhiteSpace() ? User.DefaultPassword : input.TenantAdminPassword); CheckErrors(await UserManager.CreateAsync(adminUser)); // 保存,获取角色id await CurrentUnitOfWork.SaveChangesAsync(); // 授权 CheckErrors(await UserManager.AddToRoleAsync(adminUser, adminRole.Name)); await CurrentUnitOfWork.SaveChangesAsync(); } var resultDto = new RegisterTenantResultDto() { TenantId = tenant.Id, IsActive = tenant.IsActive, UseCaptchaOnUserLogin = await UseCaptchaOnLogin(tenant.Id) }; return(resultDto); }