Browse Source

feat: implement culture-aware login redirection and update login URL handling

pull/25235/head
maliming 5 months ago
parent
commit
e0d7c81d21
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 28
      framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/CultureAwareRedirectToLoginHelper.cs
  2. 2
      modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Themes/Basic/LoginDisplay.razor
  3. 11
      modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Themes/Basic/LoginDisplay.razor.cs
  4. 21
      modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Themes/Basic/WebAssemblyRedirectToLogin.razor
  5. 2
      modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor.Server/AbpIdentityBlazorMudBlazorServerModule.cs

28
framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/CultureAwareRedirectToLoginHelper.cs

@ -0,0 +1,28 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.WebAssembly.Authentication;
using Microsoft.Extensions.Options;
using Volo.Abp.AspNetCore.Components.Web;
using Volo.Abp.AspNetCore.Components.WebAssembly;
namespace Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor;
public static class CultureAwareRedirectToLoginHelper
{
public static async Task RedirectAsync(
NavigationManager navigation,
string loginUrl,
IRouteBasedCultureUrlHelper cultureUrlHelper,
IOptions<AbpAspNetCoreComponentsWebOptions> webOptions)
{
var cultureLoginUrl = await cultureUrlHelper.PrependCulturePrefixAsync(loginUrl);
if (webOptions.Value.IsBlazorWebApp)
{
navigation.NavigateTo(cultureLoginUrl, forceLoad: true);
}
else
{
navigation.NavigateToLogin(cultureLoginUrl);
}
}
}

2
modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Themes/Basic/LoginDisplay.razor

@ -39,6 +39,6 @@
</MudMenu>
</Authorized>
<NotAuthorized>
<MudButton Variant="Variant.Text" Color="Color.Inherit" Href="Account/Login">@L["Login"]</MudButton>
<MudButton Variant="Variant.Text" Color="Color.Inherit" Href="@GetLoginUrl()">@L["Login"]</MudButton>
</NotAuthorized>
</AuthorizeView>

11
modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Themes/Basic/LoginDisplay.razor.cs

@ -2,6 +2,8 @@ using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Routing;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.RequestLocalization;
using Volo.Abp.UI.Navigation;
namespace Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme.Themes.Basic;
@ -11,6 +13,9 @@ public partial class LoginDisplay : IDisposable
[Inject]
protected IMenuManager MenuManager { get; set; }
[Inject]
protected IHttpContextAccessor HttpContextAccessor { get; set; }
protected ApplicationMenu Menu { get; set; }
protected override async Task OnInitializedAsync()
@ -20,6 +25,12 @@ public partial class LoginDisplay : IDisposable
Navigation.LocationChanged += OnLocationChanged;
}
protected string GetLoginUrl()
{
var culture = AbpRequestCultureCookieHelper.GetRouteCulture(HttpContextAccessor.HttpContext);
return string.IsNullOrEmpty(culture) ? "Account/Login" : $"{culture}/Account/Login";
}
protected virtual void OnLocationChanged(object sender, LocationChangedEventArgs e)
{
InvokeAsync(StateHasChanged);

21
modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Themes/Basic/WebAssemblyRedirectToLogin.razor

@ -1,25 +1,22 @@
@inject NavigationManager Navigation
@using Volo.Abp.DependencyInjection
@using Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme.Themes.Basic
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor
@using Microsoft.Extensions.Options
@using Volo.Abp.AspNetCore.Components.WebAssembly
@using Volo.Abp.AspNetCore.Components.Web
@inherits RedirectToLogin
@attribute [ExposeServices(typeof(RedirectToLogin))]
@attribute [Dependency(ReplaceServices = true)]
@inject IOptions<AuthenticationOptions> AuthenticationOptions
@inject NavigationManager Navigation
@inject IOptions<AuthenticationOptions> AuthOptions
@inject IRouteBasedCultureUrlHelper CultureUrlHelper
@inject IOptions<AbpAspNetCoreComponentsWebOptions> AbpAspNetCoreComponentsWebOptions
@code {
protected override void OnInitialized()
protected override void OnInitialized() { }
protected override Task OnInitializedAsync()
{
if (AbpAspNetCoreComponentsWebOptions.Value.IsBlazorWebApp)
{
Navigation.NavigateTo(AuthenticationOptions.Value.LoginUrl, forceLoad: true);
}
else
{
Navigation.NavigateToLogin(AuthenticationOptions.Value.LoginUrl);
}
return CultureAwareRedirectToLoginHelper.RedirectAsync(Navigation, AuthOptions.Value.LoginUrl, CultureUrlHelper, AbpAspNetCoreComponentsWebOptions);
}
}

2
modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor.Server/AbpIdentityBlazorMudBlazorServerModule.cs

@ -1,4 +1,3 @@
using Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor;
using Volo.Abp.Modularity;
using Volo.Abp.PermissionManagement.Blazor.MudBlazor.Server;
@ -6,7 +5,6 @@ namespace Volo.Abp.Identity.Blazor.MudBlazor.Server;
[DependsOn(
typeof(AbpIdentityBlazorMudBlazorModule),
typeof(AbpAspNetCoreComponentsServerThemingMudBlazorModule),
typeof(AbpPermissionManagementBlazorMudBlazorServerModule)
)]
public class AbpIdentityBlazorMudBlazorServerModule : AbpModule

Loading…
Cancel
Save