using Hcs.WebApp.Data; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Radzen; namespace Hcs.WebApp.Controllers { [Route("identity/[action]")] public class IdentityController( IUserStore userStore, UserManager userManager, SignInManager signInManager) : Controller { private readonly IUserStore userStore = userStore; private readonly UserManager userManager = userManager; private readonly SignInManager signInManager = signInManager; [HttpPost] public async Task Register(string userName, string password, string returnUrl) { var user = Activator.CreateInstance(); await userStore.SetUserNameAsync(user, userName, CancellationToken.None); var result = await userManager.CreateAsync(user, password); if (!result.Succeeded) { var error = string.Join(", ", result.Errors.Select(error => error.Description)); if (!string.IsNullOrEmpty(returnUrl)) { return Redirect($"/account/register?error={error}&returnUrl={Uri.EscapeDataString(returnUrl)}"); } else { return Redirect($"/account/register?error={error}"); } } await signInManager.SignInAsync(user, isPersistent: false); if (string.IsNullOrEmpty(returnUrl)) { return Redirect("/"); } return Redirect(returnUrl); } [HttpPost] public async Task Login(string userName, string password, string returnUrl) { var result = await signInManager.PasswordSignInAsync(userName, password, false, false); if (!result.Succeeded) { if (!string.IsNullOrEmpty(returnUrl)) { return Redirect($"/account/login?status=failed&returnUrl={Uri.EscapeDataString(returnUrl)}"); } else { return Redirect($"/account/login?status=failed"); } } if (string.IsNullOrEmpty(returnUrl)) { return Redirect("/"); } return Redirect(returnUrl); } public async Task Logout() { await signInManager.SignOutAsync(); return Redirect("/"); } } }