Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

100 рядки
2.7KB

  1. using CartWise.Infrastructure.Identity;
  2. using CartWise.Web.ViewModels.Account;
  3. using Microsoft.AspNetCore.Identity;
  4. using Microsoft.AspNetCore.Mvc;
  5. namespace CartWise.Web.Controllers;
  6. public class AccountController : Controller
  7. {
  8. private readonly UserManager<ApplicationUser> _userManager;
  9. private readonly SignInManager<ApplicationUser> _signInManager;
  10. public AccountController(UserManager<ApplicationUser> userManager, SignInManager<ApplicationUser> signInManager)
  11. {
  12. _userManager = userManager;
  13. _signInManager = signInManager;
  14. }
  15. [HttpGet]
  16. public IActionResult Register(string? returnUrl = null)
  17. {
  18. return View(new RegisterViewModel { ReturnUrl = returnUrl });
  19. }
  20. [HttpPost]
  21. [ValidateAntiForgeryToken]
  22. public async Task<IActionResult> Register(RegisterViewModel model)
  23. {
  24. if (!ModelState.IsValid)
  25. {
  26. return View(model);
  27. }
  28. var user = new ApplicationUser
  29. {
  30. UserName = model.Email,
  31. Email = model.Email,
  32. DisplayName = model.DisplayName,
  33. CreatedUtc = DateTime.UtcNow
  34. };
  35. var result = await _userManager.CreateAsync(user, model.Password);
  36. if (!result.Succeeded)
  37. {
  38. foreach (var error in result.Errors)
  39. {
  40. ModelState.AddModelError(string.Empty, error.Description);
  41. }
  42. return View(model);
  43. }
  44. await _signInManager.SignInAsync(user, isPersistent: false);
  45. return RedirectToLocal(model.ReturnUrl);
  46. }
  47. [HttpGet]
  48. public IActionResult Login(string? returnUrl = null)
  49. {
  50. return View(new LoginViewModel { ReturnUrl = returnUrl });
  51. }
  52. [HttpPost]
  53. [ValidateAntiForgeryToken]
  54. public async Task<IActionResult> Login(LoginViewModel model)
  55. {
  56. if (!ModelState.IsValid)
  57. {
  58. return View(model);
  59. }
  60. var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
  61. if (!result.Succeeded)
  62. {
  63. ModelState.AddModelError(string.Empty, "Invalid login attempt.");
  64. return View(model);
  65. }
  66. return RedirectToLocal(model.ReturnUrl);
  67. }
  68. [HttpPost]
  69. [ValidateAntiForgeryToken]
  70. public async Task<IActionResult> Logout()
  71. {
  72. await _signInManager.SignOutAsync();
  73. return RedirectToAction("Index", "Home");
  74. }
  75. private IActionResult RedirectToLocal(string? returnUrl)
  76. {
  77. if (!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl))
  78. {
  79. return Redirect(returnUrl);
  80. }
  81. return RedirectToAction("Index", "Home");
  82. }
  83. }

Powered by TurnKey Linux.