@page "/admin/login" @using System.ComponentModel.DataAnnotations @layout TaxBaik.Web.Components.Admin.Layout.BlankLayout @attribute [AllowAnonymous] @inject AuthService AuthService @inject NavigationManager NavigationManager @inject CustomAuthenticationStateProvider AuthStateProvider 로그인 관리자 로그인 @if (!string.IsNullOrEmpty(errorMessage)) { @errorMessage } @if (isLoading) { 로그인 중... } else { 로그인 } @code { private MudForm form; private bool isFormValid = false; private bool isLoading = false; private string errorMessage = ""; private LoginModel model = new(); private async Task HandleLogin() { if (isLoading) return; isLoading = true; errorMessage = ""; try { var token = await AuthService.AuthenticateAndGenerateTokenAsync(model.Username, model.Password); if (token == null) { errorMessage = "사용자명 또는 비밀번호가 올바르지 않습니다."; isLoading = false; return; } await AuthStateProvider.LoginAsync(token); NavigationManager.NavigateTo("/taxbaik/admin/dashboard", forceLoad: false); } catch (Exception ex) { errorMessage = "로그인 중 오류가 발생했습니다."; isLoading = false; } } private class LoginModel { public string Username { get; set; } = ""; public string Password { get; set; } = ""; } }