2016-09-21 2 views
2

아래 코드를 참조하십시오. 나는이 방법으로 우리가 주문 데이터를 클레임에 추가 할 수 있다는 것을 알았지 만 이제는 그 값을 다시 읽는 방법을 묻습니다. 내가 주장 이메일과 이메일 2에 대한 값을 다시 읽고 싶은 말을 난 당신이 ClaimsIdentityFindFirst(string type) 방법을 사용할 수 있습니다 주장 이메일과 이메일 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

하기 위해 작성하는 데 필요한 코드를 말씀 해주십시오 클레임 유형을 기반으로 클레임을 검색합니다. 이 경우 Email 또는 Email2

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

에서 I는 통상 정수

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; 
    } 
} 
관련 문제