2016-09-21 1 views
2

voir le code ci-dessous. Je dois savoir que de cette façon, nous pouvons ajouter nos données personnalisées à des revendications, mais maintenant, la question est de savoir comment lire ces valeurs. dire que je veux relire la valeur pour les réclamations Email et Email2 s'il vous plaît me dire quel code je dois écrire à relire la valeur pour les réclamations Email et Email2 grâceASP.Net MVC: Comment lire la valeur de mes revendications personnalisées

UserManager<applicationuser> userManager = new UserManager<applicationuser>(new UserStore<applicationuser>(new SecurityContext())); 
ClaimsIdentity identity = userManager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie 
var user = userManager.Find(userName, password); 
identity.AddClaim(new Claim("Email", user.Email)); 
identity.AddClaim(new Claim("Email2", user.Email)); 

Répondre

3

Vous pouvez utiliser la méthode FindFirst(string type) sur ClaimsIdentity récupérer la réclamation en fonction du type de réclamation. Dans ce cas Email ou Email2

var claimType = "Email"; 
var claim = identity.FindFirst(claimType); 
var email = claim == null ? string.Empty : claim.Value; 

Je normalement stocker les types de revendications constantes

public static partial class Constants { 
    public class Security { 
     public static class ClaimTypes { 
      public const string Email = "http://schemas.mycompany.com/identity/claims/email"; 
      public const string Email2 = "http://schemas.mycompany.com/identity/claims/email2"; 
     } 
    } 
} 

puis créer des méthodes d'extension pour les extraire d'une mise en œuvre IIdentity à condition qu'il soit dérivé de ClaimsIdentity.

public static class GenericIdentityExtensions { 
    /// <summary> 
    /// Return the Email claim 
    /// </summary> 
    public static string GetEmail(this IIdentity identity) { 
     if (identity != null && identity.IsAuthenticated) { 
      ClaimsIdentity claimsIdentity = identity as ClaimsIdentity; 
      if (claimsIdentity != null) 
       return claimsIdentity.FindFirstOrEmpty(Constants.Security.ClaimTypes.Email); 
     } 
     return string.Empty; 
    } 
    /// <summary> 
    /// Return the Email2 claim 
    /// </summary> 
    public static string GetEmail2(this IIdentity identity) { 
     if (identity != null && identity.IsAuthenticated) { 
      ClaimsIdentity claimsIdentity = identity as ClaimsIdentity; 
      if (claimsIdentity != null) 
       return claimsIdentity.FindFirstOrEmpty(Constants.Security.ClaimTypes.Email2); 
     } 
     return string.Empty; 
    } 
    /// <summary> 
    /// Retrieves the first claim that is matched by the specified type if it exists, String.Empty otherwise. 
    /// </summary> 
    internal static string FindFirstOrEmpty(this ClaimsIdentity identity, string claimType) { 
     var claim = identity.FindFirst(claimType); 
     return claim == null ? string.Empty : claim.Value; 
    } 
}