2016-09-21 14 views
2

以下のコードを参照してください。私は、このようにしてカスタムデータをクレームに追加することができることを知っておく必要がありますが、今質問はその値を読み取る方法です。私が主張電子メールとEMAIL2の値をリードバックしたいと私はあなたがClaimsIdentityFindFirst(string type)メソッドを使用することができます主張電子メールとEMAIL2の値をリードバックおかげ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

する記述する必要がどのようなコードを教えてくださいクレームタイプに基づいてクレームを取り出す。この場合Email又はEmail2

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; 
    } 
} 
関連する問題