diff --git a/TaxBaik.Admin/Components/Pages/Login.razor b/TaxBaik.Admin/Components/Pages/Login.razor index b2d041e..e1c30bf 100644 --- a/TaxBaik.Admin/Components/Pages/Login.razor +++ b/TaxBaik.Admin/Components/Pages/Login.razor @@ -29,16 +29,65 @@ +@using Microsoft.AspNetCore.Authentication +@using System.Security.Claims +@using TaxBaik.Domain.Interfaces + @code { private MudForm form; private bool isFormValid = false; private string errorMessage = ""; - private LoginModel model = new(); + private bool isLoading = false; + + [Inject] + private IAdminUserRepository AdminUserRepository { get; set; } + + [Inject] + private NavigationManager NavigationManager { get; set; } + + [Inject] + private HttpContextAccessor HttpContextAccessor { get; set; } private async Task HandleLogin() { - errorMessage = "로그인 기능은 준비 중입니다."; + if (!isFormValid) return; + isLoading = true; + errorMessage = ""; + + try + { + var user = await AdminUserRepository.GetByUsernameAsync(model.Username); + if (user == null || !BCrypt.Net.BCrypt.Verify(model.Password, user.PasswordHash)) + { + errorMessage = "사용자명 또는 비밀번호가 올바르지 않습니다."; + isLoading = false; + return; + } + + var claims = new List + { + new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()), + new Claim(ClaimTypes.Name, user.Username) + }; + var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme); + var authProperties = new AuthenticationProperties { IsPersistent = true }; + + await HttpContextAccessor.HttpContext.SignInAsync( + CookieAuthenticationDefaults.AuthenticationScheme, + new ClaimsPrincipal(claimsIdentity), + authProperties); + + NavigationManager.NavigateTo("/taxbaik/admin/dashboard"); + } + catch (Exception ex) + { + errorMessage = $"로그인 중 오류: {ex.Message}"; + } + finally + { + isLoading = false; + } } private class LoginModel diff --git a/TaxBaik.Admin/TaxBaik.Admin.csproj b/TaxBaik.Admin/TaxBaik.Admin.csproj index 9f19aed..8f8c88c 100644 --- a/TaxBaik.Admin/TaxBaik.Admin.csproj +++ b/TaxBaik.Admin/TaxBaik.Admin.csproj @@ -13,6 +13,7 @@ +