Open Closed

Tenant Admin Password validation from Host login when we change Tenant password. #9002


User avatar
0
sghorakavi@cpat.com created

*** How do we call PasswordValidation in TenantController.cs similar to User password validation ? Any sample code ?***


2 Answer(s)
  • User Avatar
    0
    berkansasmaz created
    Support Team .NET Developer

    Hi,

    This is a known issue because SAAS and Identity are two separate modules, the password cannot be verified in the module.

    But you can custom it in your project:

    [Dependency(ReplaceServices = true)]
    [ExposeServices(typeof(ITenantAppService))]
    public class MyTenantAppService : TenantAppService
    {
        protected IOptions<IdentityOptions> IdentityOptions { get; }
        private IdentityUserManager _userManager;
    
        public MyTenantAppService(
            ITenantRepository tenantRepository,
            IEditionRepository editionRepository,
            ITenantManager tenantManager,
            IDataSeeder dataSeeder,
            IDistributedEventBus distributedEventBus,
            IOptions<AbpDbConnectionOptions> dbConnectionOptions,
            IConnectionStringChecker connectionStringChecker,
            IOptions<IdentityOptions> identityOptions, IdentityUserManager userManager) : base(tenantRepository, editionRepository, tenantManager, dataSeeder, distributedEventBus, dbConnectionOptions, connectionStringChecker)
        {
            IdentityOptions = identityOptions;
            _userManager = userManager;
        }
    
        public async override Task<SaasTenantDto> CreateAsync(SaasTenantCreateDto input)
        {
            if (!input.AdminPassword.IsNullOrWhiteSpace())
            {
                await ValidPasswordAsync(input.AdminPassword);
            }
    
            return await base.CreateAsync(input);
        }
    
        public async override Task SetPasswordAsync(Guid id, SaasTenantSetPasswordDto input)
        {
            await ValidPasswordAsync(input.Password);
            await base.SetPasswordAsync(id, input);
        }
    
        private async Task ValidPasswordAsync(string password)
        {
            var errors = new List<IdentityError>();
            var isValid = true;
            await IdentityOptions.SetAsync();
    
            foreach (var passwordValidator in _userManager.PasswordValidators)
            {
                var result = await passwordValidator.ValidateAsync(_userManager, null, password);
                if (!result.Succeeded)
                {
                    if (result.Errors.Any())
                    {
                        errors.AddRange(result.Errors);
                    }
    
                    isValid = false;
                }
            }
    
            if (!isValid)
            {
                IdentityResult.Failed(errors.ToArray()).CheckErrors();
            }
        }
    }
    

  • User Avatar
    0
    sghorakavi@cpat.com created

    Thank you berkansasmaz, It is working fine.

Learn More, Pay Less
33% OFF
All Trainings!
Get Your Deal
Mastering ABP Framework Book
The Official Guide
Mastering
ABP Framework
Learn More
Mastering ABP Framework Book
Made with ❤️ on ABP v10.2.0-preview. Updated on January 09, 2026, 07:22
1
ABP Assistant
🔐 You need to be logged in to use the chatbot. Please log in first.