16-7 Déconnexion
La dernière étape consiste à permettre de se déconnecter de l'application. Une action Deconnexion existe sur le contrôleur AuthController, mais elle ne fait que rediriger vers l'accueil.
-
Dans un premier temps, créez une action
Deconnexion, associée à une requêtePOSTsur/auth/Deconnexion.Snowfall.Web.Mvc/Controllers/AuthController.cs// GET /auth/deconnexion
[HttpPost("[action]")]
[Authorize]
public async Task<IActionResult> Deconnexion()
{
}infoL'attribut
Authorizevérifie sur un utilisateur est connecté avant d'accéder à la route. Nous verrons plus en détail cet aspect un peu plus loin. -
Gestion de la déconnexion. La fonction
SignOutAsyncsurSignInManagerpermet de procéder à la déconnexion de l'utilisateur.Snowfall.Web.Mvc/Controllers/AuthController.cs// GET /auth/deconnexion
[HttpPost("[action]")]
[Authorize]
public async Task<IActionResult> Deconnexion()
{
await _signInManager.SignOutAsync();
return RedirectToAction("Index", "Evenements");
}
Modification du menu
Finalement, dans le menu principal, on doit en quelque sorte "camoufler" l'option de déconnexion derrière un formulaire. En effet, un lien <a> ne peut pas faire de POST, c'est obligatoirement un GET.
La balise form ne vient pas avec un style particulier, donc on devrait pouvoir insérer un bouton déguisé en lien très facilement dans une balise form.
<!-- ... -->
@if (User.Identity != null && User.Identity.IsAuthenticated)
{
<li class="nav-item">
<form asp-controller="Auth" asp-action="Deconnexion">
<button class="btn btn-link nav-link">Déconnexion</button>
</form>
</li>
}
<!-- ... -->
Voilà, tout devrait fonctionner comme avant, mais avec une action POST!
