hackernet/Apps/HackerNet.Web/Controllers/AccountController.cs
2021-12-15 13:54:01 +01:00

91 lines
2.2 KiB
C#

using HackerNet.Web.Models;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
namespace HackerNet.Web.Controllers;
public class AccountController : HackerController
{
private readonly UserManager<IdentityUser> _userManager;
private readonly SignInManager<IdentityUser> _signInManager;
public AccountController(UserManager<IdentityUser> userManager, SignInManager<IdentityUser> signInManager)
{
_userManager = userManager;
_signInManager = signInManager;
}
[HttpGet]
public IActionResult Signup()
{
return View(new SignupLoginViewModel());
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Signup(SignupLoginViewModel cmd)
{
if (!ModelState.IsValid)
{
return View(cmd);
}
var user = new IdentityUser(cmd.Username);
var result = await _userManager.CreateAsync(user, cmd.Password);
if (!result.Succeeded)
{
ModelState
.AddModelError(nameof(SignupLoginViewModel.Username), "Impossible de créer le compte");
return View(cmd);
}
SetFlashMessage("Votre compte a été créé !");
return RedirectToAction("Index", "Links");
}
[HttpGet]
public IActionResult Login()
{
return View(new SignupLoginViewModel());
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(SignupLoginViewModel cmd, string? redirectUrl = null)
{
if (!ModelState.IsValid)
{
return View(cmd);
}
var user = await _userManager.FindByNameAsync(cmd.Username);
if (user == null)
{
ModelState
.AddModelError(nameof(SignupLoginViewModel.Username), "Nom d'utilisateur ou mot de passe invalide");
return View(cmd);
}
var result = await _signInManager.PasswordSignInAsync(user, cmd.Password, true, false);
if (!result.Succeeded)
{
ModelState
.AddModelError(nameof(SignupLoginViewModel.Username), "Nom d'utilisateur ou mot de passe invalide");
return View(cmd);
}
SetFlashMessage("Vous êtes désormais connecté !");
if (!string.IsNullOrWhiteSpace(redirectUrl))
{
return Redirect(redirectUrl);
}
return RedirectToAction("Index", "Links");
}
}