From 4dcb43726d0164fc29015b9d11805feaca639244 Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Mon, 20 May 2024 23:10:10 -0400 Subject: [PATCH] fixes the exception loop handling --- .../UserLoggedInEventHandler.cs | 30 ++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/services/identity/src/EShopOnAbp.IdentityService.Application/UserLoggedInEventHandler.cs b/services/identity/src/EShopOnAbp.IdentityService.Application/UserLoggedInEventHandler.cs index 058db2d8..075b1283 100644 --- a/services/identity/src/EShopOnAbp.IdentityService.Application/UserLoggedInEventHandler.cs +++ b/services/identity/src/EShopOnAbp.IdentityService.Application/UserLoggedInEventHandler.cs @@ -1,8 +1,11 @@ -using System.Threading.Tasks; +using System.Linq; +using System.Threading.Tasks; using EShopOnAbp.IdentityService.ETOs; +using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.Logging; using Volo.Abp; using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Repositories; using Volo.Abp.EventBus.Distributed; using Volo.Abp.Identity; using Volo.Abp.Uow; @@ -13,16 +16,22 @@ public class UserLoggedInEventHandler : IDistributedEventHandler _logger; + private readonly IIdentityUserRepository _identityUserRepository; + private readonly ILookupNormalizer _lookupNormalizer; - public UserLoggedInEventHandler(IdentityUserManager userManager, ILogger logger) + public UserLoggedInEventHandler(IdentityUserManager userManager, + ILogger logger, + IIdentityUserRepository identityUserRepository, + ILookupNormalizer lookupNormalizer) { _userManager = userManager; _logger = logger; + _identityUserRepository = identityUserRepository; + _lookupNormalizer = lookupNormalizer; } - - + [UnitOfWork] - public async virtual Task HandleEventAsync(UserLoggedInEto eventData) + public virtual async Task HandleEventAsync(UserLoggedInEto eventData) { if (eventData == null) { @@ -59,8 +68,15 @@ protected virtual async Task CreateCurrentUserAsync(UserLoggedInEto userInfo) // This should run once to sync the admin userIds that seeded by IdentityModule and the Keycloak admin if (userInfo.UserName == "admin") { - var adminUser = await _userManager.FindByNameAsync("admin"); - await _userManager.DeleteAsync(adminUser); + var normalizedName = _lookupNormalizer.NormalizeName(userInfo.UserName); + var adminUser = await _identityUserRepository.FindByNormalizedUserNameAsync(normalizedName); + foreach (var role in adminUser.Roles.ToList()) + { + user.AddRole(role.RoleId); + } + + // Hard delete the admin-user + await _identityUserRepository.HardDeleteAsync(adminUser, true); } var result = await _userManager.CreateAsync(user);