From f2bb36a32fa245c09a36f5d6c99a4ea17859a29a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 20 Apr 2021 22:30:36 +0300 Subject: [PATCH 1/3] Fixed #8240: Username is not visible when logged in with the Blazor UI WASM --- .../Web/Security/AbpComponentsClaimsCache.cs | 11 +++++++--- .../AbpWebAssemblyHostBuilderExtensions.cs | 21 +++++++------------ 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/Security/AbpComponentsClaimsCache.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/Security/AbpComponentsClaimsCache.cs index 3e3cf26e5b..281b2f7ded 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/Security/AbpComponentsClaimsCache.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/Security/AbpComponentsClaimsCache.cs @@ -1,6 +1,7 @@ using System.Security.Claims; using System.Threading.Tasks; using Microsoft.AspNetCore.Components.Authorization; +using Microsoft.Extensions.DependencyInjection; using Volo.Abp.DependencyInjection; namespace Volo.Abp.AspNetCore.Components.Web.Security @@ -9,15 +10,19 @@ namespace Volo.Abp.AspNetCore.Components.Web.Security typeof(AbpComponentsClaimsCache), typeof(IAsyncInitialize) )] - public class AbpComponentsClaimsCache : ISingletonDependency, IAsyncInitialize + public class AbpComponentsClaimsCache : IScopedDependency, IAsyncInitialize { public ClaimsPrincipal Principal { get; private set; } private readonly AuthenticationStateProvider _authenticationStateProvider; - public AbpComponentsClaimsCache(AuthenticationStateProvider authenticationStateProvider) + public AbpComponentsClaimsCache(IClientScopeServiceProviderAccessor clientScopeServiceProviderAccessor) { - _authenticationStateProvider = authenticationStateProvider; + _authenticationStateProvider = clientScopeServiceProviderAccessor.ServiceProvider.GetRequiredService(); + _authenticationStateProvider.AuthenticationStateChanged += async (task) => + { + Principal = (await task).User; + }; } public virtual async Task InitializeAsync() diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyHostBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyHostBuilderExtensions.cs index c2d433f8f9..f05feacae8 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyHostBuilderExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyHostBuilderExtensions.cs @@ -48,17 +48,12 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Hosting Check.NotNull(application, nameof(application)); Check.NotNull(serviceProvider, nameof(serviceProvider)); - var serviceProviderAccessor = (ComponentsClientScopeServiceProviderAccessor) - serviceProvider.GetRequiredService(); - serviceProviderAccessor.ServiceProvider = serviceProvider; + ((ComponentsClientScopeServiceProviderAccessor) serviceProvider + .GetRequiredService()).ServiceProvider = serviceProvider; application.Initialize(serviceProvider); - - using (var scope = serviceProvider.CreateScope()) - { - await InitializeModulesAsync(scope.ServiceProvider); - await SetCurrentLanguageAsync(scope); - } + await InitializeModulesAsync(serviceProvider); + await SetCurrentLanguageAsync(serviceProvider); } private static async Task InitializeModulesAsync(IServiceProvider serviceProvider) @@ -69,11 +64,11 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Hosting } } - private static async Task SetCurrentLanguageAsync(IServiceScope scope) + private static async Task SetCurrentLanguageAsync(IServiceProvider serviceProvider) { - var configurationClient = scope.ServiceProvider.GetRequiredService(); - var utilsService = scope.ServiceProvider.GetRequiredService(); - var configuration = configurationClient.Get(); + var configurationClient = serviceProvider.GetRequiredService(); + var utilsService = serviceProvider.GetRequiredService(); + var configuration = await configurationClient.GetAsync(); var cultureName = configuration.Localization?.CurrentCulture?.CultureName; if (!cultureName.IsNullOrEmpty()) { From 0ca0526750e4b27be5daceede22011fd4bdac871 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 20 Apr 2021 22:39:47 +0300 Subject: [PATCH 2/3] Use the right AbpComponentsClaimsCache scope. --- .../WebAssembly/WebAssemblyCurrentPrincipalAccessor.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCurrentPrincipalAccessor.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCurrentPrincipalAccessor.cs index e38cb9258b..36438871c1 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCurrentPrincipalAccessor.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCurrentPrincipalAccessor.cs @@ -1,4 +1,5 @@ using System.Security.Claims; +using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.Components.Web.Security; using Volo.Abp.DependencyInjection; using Volo.Abp.Security.Claims; @@ -10,9 +11,9 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly protected AbpComponentsClaimsCache ClaimsCache { get; } public WebAssemblyCurrentPrincipalAccessor( - AbpComponentsClaimsCache claimsCache) + IClientScopeServiceProviderAccessor clientScopeServiceProviderAccessor) { - ClaimsCache = claimsCache; + ClaimsCache = clientScopeServiceProviderAccessor.ServiceProvider.GetRequiredService(); } protected override ClaimsPrincipal GetClaimsPrincipal() From fb5735d7f0a8cd3e42e1733bebb5587a4e9791bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 20 Apr 2021 23:05:52 +0300 Subject: [PATCH 3/3] Refresh usermenu when auth state changes --- .../Themes/Basic/LoginDisplay.razor.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs index fc7b6ef930..addef3dc80 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs @@ -1,6 +1,7 @@ using System; using System.Threading.Tasks; using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Authorization; using Microsoft.AspNetCore.Components.Routing; using Volo.Abp.UI.Navigation; @@ -10,6 +11,9 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme.Themes.Basic { [Inject] protected IMenuManager MenuManager { get; set; } + + [Inject] + protected AuthenticationStateProvider AuthenticationStateProvider { get; set; } protected ApplicationMenu Menu { get; set; } @@ -18,6 +22,12 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme.Themes.Basic Menu = await MenuManager.GetAsync(StandardMenus.User); Navigation.LocationChanged += OnLocationChanged; + + AuthenticationStateProvider.AuthenticationStateChanged += async (task) => + { + Menu = await MenuManager.GetAsync(StandardMenus.User); + await InvokeAsync(StateHasChanged); + }; } protected virtual void OnLocationChanged(object sender, LocationChangedEventArgs e)