From c9bf4f4f6f1ef49d5df82d13e7371fe744b4f6c5 Mon Sep 17 00:00:00 2001 From: kjh2064 Date: Wed, 1 Jul 2026 13:43:57 +0900 Subject: [PATCH] fix: render admin login as static form --- .../Components/Admin/Pages/Login.razor | 129 +++--------------- 1 file changed, 22 insertions(+), 107 deletions(-) diff --git a/TaxBaik.Web/Components/Admin/Pages/Login.razor b/TaxBaik.Web/Components/Admin/Pages/Login.razor index 2e00cc5..a94a505 100644 --- a/TaxBaik.Web/Components/Admin/Pages/Login.razor +++ b/TaxBaik.Web/Components/Admin/Pages/Login.razor @@ -1,13 +1,8 @@ @page "/admin/login" -@using System.ComponentModel.DataAnnotations @layout TaxBaik.Web.Components.Admin.Layout.BlankLayout -@rendermode @(new InteractiveServerRenderMode(prerender: false)) @attribute [AllowAnonymous] -@inject IApiClient ApiClient -@inject NavigationManager NavigationManager -@inject CustomAuthenticationStateProvider AuthStateProvider -@inject IJSRuntime Js @inject ILocalStorageService LocalStorageService +@inject IJSRuntime Js 로그인 @@ -15,54 +10,39 @@ 관리자 로그인 -
- + + - +
- +
- @if (!string.IsNullOrEmpty(errorMessage)) - { - @errorMessage - } +
@code { - private bool isLoading = false; - private string errorMessage = ""; - private LoginModel model = new(); + private readonly LoginModel model = new(); private const string RememberedUsernameKey = "admin-remembered-username"; protected override async Task OnInitializedAsync() @@ -73,90 +53,25 @@ if (!string.IsNullOrEmpty(remembered)) { model.Username = remembered; - model.RememberMe = true; } } catch { - // LocalStorage not available in pre-render + // LocalStorage may be unavailable during prerender. } } protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) + { await Js.InvokeVoidAsync("taxbaikAdminSession.syncRouteClass"); - } - - 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?.AccessToken == null || response?.RefreshToken == null) - { - errorMessage = "사용자명 또는 비밀번호가 올바르지 않습니다."; - isLoading = false; - return; - } - - if (model.RememberMe) - { - await LocalStorageService.SetItemAsStringAsync(RememberedUsernameKey, model.Username); - } - else - { - await LocalStorageService.RemoveItemAsync(RememberedUsernameKey); - } - - await ApiClient.SetAuthToken(response.AccessToken); - await AuthStateProvider.LoginAsync(response.AccessToken, response.RefreshToken, response.ExpiresIn); - NavigationManager.NavigateTo(GetReturnUrl(), forceLoad: false); + await Js.InvokeVoidAsync("taxbaikAdminSession.bindLoginForm"); } - catch - { - errorMessage = "로그인 중 오류가 발생했습니다."; - isLoading = false; - } - } - - private class LoginResponse - { - public string AccessToken { get; set; } = ""; - public string RefreshToken { get; set; } = ""; - public int ExpiresIn { get; set; } } private class LoginModel { public string Username { get; set; } = ""; - public string Password { get; set; } = ""; - public bool RememberMe { get; set; } - } - - private string GetReturnUrl() - { - var uri = NavigationManager.ToAbsoluteUri(NavigationManager.Uri); - if (!Microsoft.AspNetCore.WebUtilities.QueryHelpers.ParseQuery(uri.Query).TryGetValue("returnUrl", out var returnUrl) - || string.IsNullOrWhiteSpace(returnUrl)) - { - return "/taxbaik/admin/dashboard"; - } - - var value = returnUrl.ToString(); - if (!value.StartsWith("admin", StringComparison.OrdinalIgnoreCase)) - { - return "/taxbaik/admin/dashboard"; - } - - return $"/taxbaik/{value.TrimStart('/')}"; } }