|
- using CartWise.Infrastructure.Identity;
- using CartWise.Web.ViewModels.Account;
- using Microsoft.AspNetCore.Identity;
- using Microsoft.AspNetCore.Mvc;
-
- namespace CartWise.Web.Controllers;
-
- public class AccountController : Controller
- {
- private readonly UserManager<ApplicationUser> _userManager;
- private readonly SignInManager<ApplicationUser> _signInManager;
-
- public AccountController(UserManager<ApplicationUser> userManager, SignInManager<ApplicationUser> signInManager)
- {
- _userManager = userManager;
- _signInManager = signInManager;
- }
-
- [HttpGet]
- public IActionResult Register(string? returnUrl = null)
- {
- return View(new RegisterViewModel { ReturnUrl = returnUrl });
- }
-
- [HttpPost]
- [ValidateAntiForgeryToken]
- public async Task<IActionResult> Register(RegisterViewModel model)
- {
- if (!ModelState.IsValid)
- {
- return View(model);
- }
-
- var user = new ApplicationUser
- {
- UserName = model.Email,
- Email = model.Email,
- DisplayName = model.DisplayName,
- CreatedUtc = DateTime.UtcNow
- };
-
- var result = await _userManager.CreateAsync(user, model.Password);
- if (!result.Succeeded)
- {
- foreach (var error in result.Errors)
- {
- ModelState.AddModelError(string.Empty, error.Description);
- }
-
- return View(model);
- }
-
- await _signInManager.SignInAsync(user, isPersistent: false);
- return RedirectToLocal(model.ReturnUrl);
- }
-
- [HttpGet]
- public IActionResult Login(string? returnUrl = null)
- {
- return View(new LoginViewModel { ReturnUrl = returnUrl });
- }
-
- [HttpPost]
- [ValidateAntiForgeryToken]
- public async Task<IActionResult> Login(LoginViewModel model)
- {
- if (!ModelState.IsValid)
- {
- return View(model);
- }
-
- var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
- if (!result.Succeeded)
- {
- ModelState.AddModelError(string.Empty, "Invalid login attempt.");
- return View(model);
- }
-
- return RedirectToLocal(model.ReturnUrl);
- }
-
- [HttpPost]
- [ValidateAntiForgeryToken]
- public async Task<IActionResult> Logout()
- {
- await _signInManager.SignOutAsync();
- return RedirectToAction("Index", "Home");
- }
-
- private IActionResult RedirectToLocal(string? returnUrl)
- {
- if (!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl))
- {
- return Redirect(returnUrl);
- }
-
- return RedirectToAction("Index", "Home");
- }
- }
|