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êtePOST
sur/auth/Deconnexion
.Snowfall.Web.Mvc/Controllers/AuthController.cs// GET /auth/deconnexion
[HttpPost("[action]")]
[Authorize]
public async Task<IActionResult> Deconnexion()
{
}infoL'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. -
Gestion de la déconnexion. La fonction
SignOutAsync
surSignInManager
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
.
<!-- ... -->
@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
!