18-2 Utiliser les Claims dans l'application
Ajout à Program.cs de la class Factory
Il faut dire à notre application et Identity
d'utiliser la classe Factory
créée précédemment plutôt que celle par défaut.
Modifiez la ligne AddIdentity
pour y ajouter AddClaimsPrincipalFactory
.
Snowfall.Web.Mvc/Program.cs
// Identity
builder.Services
.AddIdentity<ApplicationUser, ApplicationRole>()
.AddClaimsPrincipalFactory<ApplicationClaimsPrincipalFactory>();
Utiliser les claims
dans une vue
Ensuite, ne serait-il pas intéressant de pouvoir afficher le prénom de l'utilisateur connecté dans la barre de navigation?
Vous devriez déjà avoir un bloc IsAuthenticated
dans le fichier de vue _Layout
.
Vous pouvez ajouter après le <ul>
une autre condition pour afficher le nom de l'utilisateur.
Snowfall.Web.Mvc/Views/Shared/_Layout.cshtml
<!-- ... -->
<ul class="navbar-nav">
@if (Context.Session.GetString("panier") != null)
{
<li class="nav-item">
<a asp-controller="Panier" asp-action="Index" class="btn btn-outline-secondary">
Panier
</a>
</li>
}
@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>
}
else
{
<li class="nav-item">
<a
class="nav-link @(controller == "Auth" ? "active" : String.Empty)"
asp-controller="Auth"
asp-action="Connexion">
Connexion
</a>
</li>
}
</ul>
@if (User.Identity != null && User.Identity.IsAuthenticated)
{
<span class="navbar-text">Bonjour, @User.FindFirstValue(ClaimTypes.GivenName)!</span>
}
</div>
</div>
</nav>
</header>
<!-- ... -->
info
Sur l'objet User
, on peut utiliser FindFirstValue
pour retourner la claim
qui correspond.
Par exemple,
@User.FindFirstValue(ClaimTypes.GivenName)
Ce qui devrait vous donner quelque chose comme...
http://localhost:4200
