@page "/login" @layout LoginLayout @using AntDesign @using JSMR.UI.Blazor.Services @using MudBlazor.Charts @using System.ComponentModel.DataAnnotations @inject SessionState Session @inject NavigationManager Nav @*

Login

*@ Sign In - JSMR @if (Session.IsAuthenticated) {

You're already logged in as @Session.Me?.Name.

} else {
@if (!string.IsNullOrWhiteSpace(error)) { }
} @code { private string username = ""; private string password = ""; private bool busy; private string? error; private LoginModel loginModel = new(); public class LoginModel { [Required] public string? Username { get; set; } [Required] public string? Password { get; set; } } private async Task LoginAsync() { busy = true; error = null; try { var ok = await Session.LoginAsync(username, password); if (!ok) { error = "Invalid username or password."; return; } Nav.NavigateTo("/"); } catch (Exception ex) { error = ex.Message; } finally { busy = false; } } private async Task Login2Async() { busy = true; error = null; try { if (string.IsNullOrWhiteSpace(loginModel.Username)) { error = "Username is required."; return; } if (string.IsNullOrWhiteSpace(loginModel.Password)) { error = "Password is required."; return; } var ok = await Session.LoginAsync(loginModel.Username, loginModel.Password); if (!ok) { error = "Invalid username or password."; return; } Nav.NavigateTo("/"); } catch (Exception ex) { error = ex.Message; } finally { busy = false; } } private async Task Logout() { busy = true; error = null; try { await Session.LogoutAsync(); } catch (Exception ex) { error = ex.Message; } finally { busy = false; } } }