From b32263801994c9305b9b58afc0b0741b6833f225 Mon Sep 17 00:00:00 2001 From: "hualin.zhu" Date: Thu, 28 Sep 2023 21:12:53 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20refactoring=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Blazor.Server.UI/Components/Shared/UserMenu.razor | 2 +- src/Blazor.Server.UI/Pages/Authentication/Login.razor | 6 +++--- .../AuthenticationServiceCollectionExtensions.cs | 2 +- .../Extensions/JWTServicesCollectionExtensions.cs | 1 + src/Infrastructure/Hubs/HubClient.cs | 2 +- .../Services/JWT/AccessTokenProvider.cs | 8 ++++---- .../Services/JWT/BlazorAuthStateProvider.cs | 4 ++-- .../Services/JWT/IAccessTokenProvider.cs | 11 +++++++++++ 8 files changed, 24 insertions(+), 12 deletions(-) create mode 100644 src/Infrastructure/Services/JWT/IAccessTokenProvider.cs diff --git a/src/Blazor.Server.UI/Components/Shared/UserMenu.razor b/src/Blazor.Server.UI/Components/Shared/UserMenu.razor index d4699fbbb..892770caf 100644 --- a/src/Blazor.Server.UI/Components/Shared/UserMenu.razor +++ b/src/Blazor.Server.UI/Components/Shared/UserMenu.razor @@ -1,6 +1,6 @@ @using CleanArchitecture.Blazor.Infrastructure.Services.JWT; @inject IStringLocalizer L -@inject AccessTokenProvider TokenProvider +@inject IAccessTokenProvider TokenProvider @inherits FluxorComponent UserManager { get; set; } = default!; - private AccessTokenProvider AccessTokenProvider { get; set; } = default!; + private IAccessTokenProvider AccessTokenProvider { get; set; } = default!; [Inject] private ILogger Logger { get; set; } = default!; @@ -118,7 +118,7 @@ await base.OnInitializedAsync(); _title = L["Sign In"]; UserManager = ScopedServices.GetRequiredService>(); - AccessTokenProvider = ScopedServices.GetRequiredService(); + AccessTokenProvider = ScopedServices.GetRequiredService(); } private async Task OnSubmit() diff --git a/src/Infrastructure/Extensions/AuthenticationServiceCollectionExtensions.cs b/src/Infrastructure/Extensions/AuthenticationServiceCollectionExtensions.cs index 1dc5ebeaf..0fdb16b5e 100644 --- a/src/Infrastructure/Extensions/AuthenticationServiceCollectionExtensions.cs +++ b/src/Infrastructure/Extensions/AuthenticationServiceCollectionExtensions.cs @@ -89,7 +89,7 @@ public static IServiceCollection AddAuthenticationService(this IServiceCollectio }; }); - services.AddScoped(); + services.AddSingleton(); services.AddSingleton(sp => { diff --git a/src/Infrastructure/Extensions/JWTServicesCollectionExtensions.cs b/src/Infrastructure/Extensions/JWTServicesCollectionExtensions.cs index a904817b6..9e6f141aa 100644 --- a/src/Infrastructure/Extensions/JWTServicesCollectionExtensions.cs +++ b/src/Infrastructure/Extensions/JWTServicesCollectionExtensions.cs @@ -20,6 +20,7 @@ public static IServiceCollection AddSimpleJwtService(this IServiceCollection ser options.Invoke(sjOptions); } services.AddSingleton(typeof(IOptions), Options.Create(sjOptions)); + services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); diff --git a/src/Infrastructure/Hubs/HubClient.cs b/src/Infrastructure/Hubs/HubClient.cs index d833b79b3..084ee0869 100644 --- a/src/Infrastructure/Hubs/HubClient.cs +++ b/src/Infrastructure/Hubs/HubClient.cs @@ -12,7 +12,7 @@ public class HubClient : IAsyncDisposable private readonly HubConnection _hubConnection; private bool _started; - public HubClient(NavigationManager navigationManager, AccessTokenProvider authProvider) + public HubClient(NavigationManager navigationManager, IAccessTokenProvider authProvider) { var token = authProvider.AccessToken; var hubUrl = navigationManager.BaseUri.TrimEnd('/') + SignalR.HubUrl; diff --git a/src/Infrastructure/Services/JWT/AccessTokenProvider.cs b/src/Infrastructure/Services/JWT/AccessTokenProvider.cs index af449c3d0..17d282a5b 100644 --- a/src/Infrastructure/Services/JWT/AccessTokenProvider.cs +++ b/src/Infrastructure/Services/JWT/AccessTokenProvider.cs @@ -4,7 +4,7 @@ using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage; namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; -public class AccessTokenProvider +public class AccessTokenProvider : IAccessTokenProvider { private readonly string _tokenKey = nameof(_tokenKey); private readonly string _refreshTokenKey = nameof(_refreshTokenKey); @@ -29,8 +29,8 @@ public AccessTokenProvider(ProtectedLocalStorage localStorage, ILoginService log public async Task Login(ApplicationUser applicationUser) { var token = await _loginService.LoginAsync(applicationUser); - await _localStorage.SetAsync(_tokenKey, token.AccessToken??""); - await _localStorage.SetAsync(_refreshTokenKey, token.RefreshToken??""); + await _localStorage.SetAsync(_tokenKey, token.AccessToken ?? ""); + await _localStorage.SetAsync(_refreshTokenKey, token.RefreshToken ?? ""); AccessToken = token.AccessToken; RefreshToken = token.RefreshToken; _tenantProvider.TenantId = applicationUser.TenantId; @@ -54,7 +54,7 @@ public async Task GetClaimsPrincipal() var result = await _tokenValidator.ValidateTokenAsync(token.Value); if (result.IsValid) { - var principal=new ClaimsPrincipal(result.ClaimsIdentity); + var principal = new ClaimsPrincipal(result.ClaimsIdentity); _tenantProvider.TenantId = principal.GetTenantId(); _tenantProvider.TenantName = principal.GetTenantName(); _currentUser.UserId = principal.GetUserId(); diff --git a/src/Infrastructure/Services/JWT/BlazorAuthStateProvider.cs b/src/Infrastructure/Services/JWT/BlazorAuthStateProvider.cs index 065f5d0ae..8b44d9656 100644 --- a/src/Infrastructure/Services/JWT/BlazorAuthStateProvider.cs +++ b/src/Infrastructure/Services/JWT/BlazorAuthStateProvider.cs @@ -1,9 +1,9 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; public class BlazorAuthStateProvider : AuthenticationStateProvider { - private readonly AccessTokenProvider _tokenProvider; + private readonly IAccessTokenProvider _tokenProvider; - public BlazorAuthStateProvider(AccessTokenProvider tokenProvider) + public BlazorAuthStateProvider(IAccessTokenProvider tokenProvider) { _tokenProvider = tokenProvider; } diff --git a/src/Infrastructure/Services/JWT/IAccessTokenProvider.cs b/src/Infrastructure/Services/JWT/IAccessTokenProvider.cs new file mode 100644 index 000000000..c35970353 --- /dev/null +++ b/src/Infrastructure/Services/JWT/IAccessTokenProvider.cs @@ -0,0 +1,11 @@ +namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + +public interface IAccessTokenProvider +{ + string? AccessToken { get; } + string? RefreshToken { get; } + + Task GetClaimsPrincipal(); + Task Login(ApplicationUser applicationUser); + Task RemoveAuthDataFromStorage(); +} \ No newline at end of file