방명록
- [개발 일지] 온라인 쇼핑몰 회원가입 후 Session 유지 구현2024년 11월 28일 16시 35분 45초에 업로드 된 글입니다.작성자: Devrun반응형
오늘은 어제 밤새고 조금 자다가 일어나서 작업하던 것을 마무리 했습니다. 홈 화면에서 로그인 화면으로 이동 회원가입으로 이동해서 회원가입을 완료하고 제대로 동작한다면, 다시 Home 화면으로 돌아오고 Account라는 링크가 Logout 링크로 변경되게 구현해보았습니다.
Session이 없다면, Logout 링크가 보여지지 않게 설정했습니다.
AuthController.cs
namespace UrbanShop.Controllers { public class AuthController : Controller { //AppDbContext private readonly AppDbContext _context; //AppDbContext Constructor public AuthController(AppDbContext context) { _context = context; } [HttpGet] public IActionResult Index() { return View(); } public IActionResult SignUp() { return View(); } [HttpPost] public async Task<IActionResult> SignUp(SignUpViewModel model) { if (ModelState.IsValid) { // Check Account var existingAccount = await _context.Account.FirstOrDefaultAsync(a => a.User_Account == model.User_Account); //Display Error when user account already in DB if (existingAccount != null) { ModelState.AddModelError("User_Account", "This account already exists."); } //Check Email var existingEmail = await _context.Customers.FirstOrDefaultAsync(c => c.Customer_Email == model.Customer_Email); //Display error when user email already in DB if (existingEmail != null) { ModelState.AddModelError("Customer_Email", "This email is already registered."); } var account = new Account { User_Account = model.User_Account, User_Password = model.User_Password }; var customer = new Customer { Customer_Name = model.Customer_Name, Customer_Email = model.Customer_Email, Customer_Phone = model.Customer_Phone, }; //Saving Account Data To DB await _context.Account.AddAsync(account); await _context.SaveChangesAsync(); //Add Account ID From Account -> Customer Table Account_ID(FK) customer.Account_ID = account.Account_ID; //Saving Customer Data To DB await _context.Customers.AddAsync(customer); await _context.SaveChangesAsync(); //After finished sign up set session var claims = new List<Claim> { new Claim(ClaimTypes.Name, account.User_Account), new Claim("AccountId", account.Account_ID.ToString()) }; var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme); await HttpContext.SignInAsync("UrbanShopAuth", new ClaimsPrincipal(claimsIdentity), new AuthenticationProperties { IsPersistent = true, ExpiresUtc = DateTime.UtcNow.AddHours(1) }); return RedirectToAction("Index", "Home"); } //Redirect view to home return RedirectToAction("Index", "Home"); } [HttpPost] public async Task<IActionResult> Logout() { await HttpContext.SignOutAsync("UrbanShopAuth"); return RedirectToAction("Index", "Home"); } } }
HomeController.cs
[AllowAnonymous] // 홈 화면은 인증 없이 접근 가능 public IActionResult Index() { var userName = User.Identity.Name; var accountId = User.FindFirst("AccountId")?.Value; ViewBag.UserName = userName; ViewBag.AccountId = accountId; return View(); } [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] public IActionResult Error() { return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); }
일단 AuthController에서 회원가입 프로세스를 완료하고 session을 만들어서 데이터를 전송합니다. 쿠키에 데이터를 저장해두기 때문에 쿠키 UrbanShopAuth라는 쿠키를 생성해서 관리합니다.
일단 여기서 가장 큰 문제는 맨처음 Home화면에서였습니다.
Home controller를 보면 [AllowAnonymous]라는 것이 있는데, 맨 처음에는 저 기능을 없이 했더니 홈화면이 인증되지 않은 사용자한테는 보여지지 않는 문제를 발견했다.해당 문제를 해결하기 위해 GPT / StackOverflow를 사용해 지식을 참고해서 다시 구현했습니다. 대략적으로 3시간 걸린 것 같습니다.
인증 구현 단계에서 체크해야할 부분이 많지만, 거기를 구현하지 못 했지만, 추후에 다시 구현할 예정이다.
오늘도 하나의 기능을 완료!
(사실 졸려서 뭐라고 쓰는지도 모르겠다...)
반응형'C# > 개발일지' 카테고리의 다른 글
[ERP 개발 일지] 로그인 프로세스 (1) 2024.12.06 [FoodFlow] ERP 시스템 개발 기록 - 수정 및 리빌드 중 (1) 2024.12.04 식당 관리 프로그램 FoodFlow 개발 1일차 (1) 2024.12.02 [쇼핑몰 개발 일지] UrbanShop 기존 프로젝트 버리고 다시 시작 (1) 2024.11.30 ASP.NET Core MVC 온라인 쇼핑몰 연습 일지 (0) 2024.11.28 다음글이 없습니다.이전글이 없습니다.댓글