Aller au contenu principal

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.

  1. Dans un premier temps, créez une action Deconnexion, associée à une requête POST sur /auth/Deconnexion.

    Snowfall.Web.Mvc/Controllers/AuthController.cs
    // GET /auth/deconnexion
    [HttpPost("[action]")]
    [Authorize]
    public async Task<IActionResult> Deconnexion()
    {

    }
    info

    L'attribut Authorize vérifie sur un utilisateur est connecté avant d'accéder à la route. Nous verrons plus en détail cet aspect un peu plus loin.

  2. Gestion de la déconnexion. La fonction SignOutAsync sur SignInManager permet 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.

Snowfall.Web.Mvc/Views/Shared/_Layout.cshtml
<!-- ... -->

@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!

level up