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)
            });
        }
Exemple #2
0
        /// <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);
        }