2016-09-21 63 views
2

請參閱下面的代碼。我知道這樣我們可以將我們的自定義數據添加到聲明中,但現在問題是如何讀取這些值。說我要回讀索賠電子郵件和電子郵件2值請告訴我,我需要什麼樣的代碼寫回讀索賠電子郵件和電子郵件2值感謝ASP.Net MVC:如何閱讀我的自定義索賠值

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)); 

回答

3

你可以使用FindFirst(string type)方法上ClaimsIdentity根據索賠類型檢索索賠。在這種情況下EmailEmail2

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

我通常存儲根據權利要求類型的常量

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"; 
     } 
    } 
} 

,然後創建擴展方法提取它們從IIdentity實現,只要它是從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; 
    } 
}