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