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 @@
관리자 로그인
-
@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('/')}";
}
}