18-3 Extension Identity (IIdentity)
Le principe fonctionne, mais faire appel à @User.FindFirstValue(ClaimTypes.GivenName)
est moins élégant qu'utiliser @User.Identity.IsAuthenticated
ou @User.Identity.Name
par exemple.
Pour nous aider, on peut créer une extension qui ajoutera des fonctions à l'objet Identity
!
- Créer dossier
Extensions
. Sous le projetWeb.Mvc
, ajoutez un dossier appeléExtensions
. - Créer la classe
IdentityExtensions
. Sous le dossier nouvellement créé, ajoutez une classeIdentityExtensions
. - Classe
static
. Comme on créera une extension pourIIdentity
, la classe doit êtrestatic
Snowfall.Web.Mvc/Extensions/IdentityExtensions.cspublic static class IdentityExtensions
{
} - Code de base pour
Prenom
. Ajoutez le code suivant pour retourner le prénom:Snowfall.Web.Mvc/Extensions/IdentityExtensions.cspublic static class IdentityExtensions
{
public static string Prenom(this IIdentity identity)
{
return identity.FindFirstValue(ClaimTypes.GivenName);
}
public static string FindFirstValue(this IIdentity identity, string claimType)
{
var claim = ((ClaimsIdentity)identity).FindFirst(claimType)?.Value;
return claim ?? string.Empty;
}
}
info
public static string Prenom(this IIdentity identity)
: la référence àthis IIdentity
indique qu'on crée une extension pour le typeIIdentity
(une fonction supplémentaire disponible sur les instances de ce type)return identity.FindFirstValue(ClaimTypes.GivenName);
: on retourne simplement leclaim
correspondant au typeGivenName
.public static string FindFirstValue(this IIdentity identity, string claimType)
cette fonction est simplement une fonction d'aide pour obtenir l'information. Comme nous aurons plusieurs propriétés à obtenir, cela réduira la duplication de code.
Utiliser l'extension dans _Layout
On peut maintenant utiliser l'extension dans _Layout
pour afficher le prénom.
Snowfall.Web.Mvc/Views/Shared/_Layout.cshtml
@if (User.Identity != null && User.Identity.IsAuthenticated)
{
<span class="navbar-text">Bonjour, @User.Identity.Prenom()!</span>
}
info
On peut maintenant simplement utiliser @User.Identity.Prenom()
. Beaucoup mieux!
Compléter la classe d'extension avec les autres attributs
Finalement, ajoutons les différentes méthodes associées aux Claims
de l'utilisateur dans la classe d'extension.
Ils ne seront pas tous utilisés dès maintenant, mais seront très pratiques lorsque nous en aurons besoin. Particulièrement Id()
.
public static class IdentityExtensions
{
public static string Prenom(this IIdentity identity)
{
return identity.FindFirstValue(ClaimTypes.GivenName);
}
public static string Nom(this IIdentity identity)
{
return identity.FindFirstValue(ClaimTypes.Surname);
}
public static string Id(this IIdentity identity)
{
return identity.FindFirstValue(ClaimTypes.NameIdentifier);
}
public static string NomComplet(this IIdentity identity)
{
return identity.FindFirstValue("NomComplet");
}
public static string FindFirstValue(this IIdentity identity, string claimType)
{
var claim = ((ClaimsIdentity)identity).FindFirst(claimType)?.Value;
return claim ?? string.Empty;
}
}