diff --git a/TaxBaik.Web/Components/Admin/Pages/Login.razor b/TaxBaik.Web/Components/Admin/Pages/Login.razor
index b9f0e3b..5ea44a0 100644
--- a/TaxBaik.Web/Components/Admin/Pages/Login.razor
+++ b/TaxBaik.Web/Components/Admin/Pages/Login.razor
@@ -6,6 +6,7 @@
@inject NavigationManager NavigationManager
@inject CustomAuthenticationStateProvider AuthStateProvider
@inject IJSRuntime Js
+@inject ILocalStorageService LocalStorageService
로그인
@@ -27,6 +28,11 @@
autocomplete="current-password"
@bind-Value="model.Password" />
+
+
+
+
+
@if (!string.IsNullOrEmpty(errorMessage))
{
@errorMessage
@@ -53,8 +59,25 @@
@code {
private bool isLoading = false;
private string errorMessage = "";
-
private LoginModel model = new();
+ private const string RememberedUsernameKey = "admin-remembered-username";
+
+ protected override async Task OnInitializedAsync()
+ {
+ try
+ {
+ var remembered = await LocalStorageService.GetItemAsStringAsync(RememberedUsernameKey);
+ if (!string.IsNullOrEmpty(remembered))
+ {
+ model.Username = remembered;
+ model.RememberMe = true;
+ }
+ }
+ catch
+ {
+ // LocalStorage not available in pre-render
+ }
+ }
protected override async Task OnAfterRenderAsync(bool firstRender)
{
@@ -82,6 +105,15 @@
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);
@@ -104,6 +136,7 @@
{
public string Username { get; set; } = "";
public string Password { get; set; } = "";
+ public bool RememberMe { get; set; }
}
private string GetReturnUrl()