91 lines
2.2 KiB
C#
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");
|
|
}
|
|
} |