@page "/auth/register" @page "/auth/login" @using MoonCore.Blazor.Tailwind.Forms.Components @using MoonCore.Helpers @using Moonlight.Client.Services @using Moonlight.Client.UI.Layouts @using Moonlight.Shared.Http.Requests.Auth @using Moonlight.Shared.Http.Responses.Auth @implements IDisposable @inject NavigationManager Navigation @inject HttpApiClient ApiClient @inject IdentityService IdentityService @{ var url = new Uri(Navigation.Uri); var isRegister = url.LocalPath.StartsWith("/auth/register"); }
@if (isRegister) {
Moonlight

Register your account

Register

Already registered? Login

} else {
Moonlight

Sign in to your account

Login

Need an account registered? Register

}
@code { [CascadingParameter] public MainLayout Layout { get; set; } // Page change handling protected override void OnInitialized() { Navigation.LocationChanged += NavigationOnLocationChanged; } private async void NavigationOnLocationChanged(object? sender, LocationChangedEventArgs e) => await InvokeAsync(StateHasChanged); public void Dispose() { Navigation.LocationChanged -= NavigationOnLocationChanged; } // Register private RegisterRequest RegisterRequest = new(); private HandleForm RegisterForm; private async Task OnSubmitRegister() { var response = await ApiClient.PostJson("api/auth/register", RegisterRequest); await IdentityService.Login(response.Token); await HandleAfterAuthPage(); } private void OnConfigureRegister(FormConfiguration configuration) { configuration.WithField(x => x.Username, fieldConfiguration => { fieldConfiguration.Columns = 6; }); configuration.WithField(x => x.Email, fieldConfiguration => { fieldConfiguration.Columns = 6; }); configuration .WithField(x => x.Password, fieldConfiguration => { fieldConfiguration.Columns = 6; }) .WithComponent(component => { component.Type = "password"; }); } // Login private LoginRequest LoginRequest = new(); private HandleForm LoginForm; private async Task OnSubmitLogin() { var response = await ApiClient.PostJson("api/auth/login", LoginRequest); await IdentityService.Login(response.Token); await HandleAfterAuthPage(); } private void OnConfigureLogin(FormConfiguration configuration) { configuration.WithField(x => x.Email, fieldConfiguration => { fieldConfiguration.Columns = 6; }); configuration .WithField(x => x.Password, fieldConfiguration => { fieldConfiguration.Columns = 6; }) .WithComponent(component => { component.Type = "password"; }); } // Navigation handling private async Task HandleAfterAuthPage() { var url = new Uri(Navigation.Uri); if (url.LocalPath.StartsWith("/auth/login") || url.LocalPath.StartsWith("/auth/register")) Navigation.NavigateTo("/"); await Layout.Load(); } }