본문 바로가기

복습용 기술공부

Claim 활용하는 방법

Claim을 활용해 @User.Identity에서 특정값을 사용하는 방법

 

1. 로그인 시 Claims에 사용자 정보 추가로 저장해두기

 

예시, AAA를 Claim에 집어넣으면,

var user = _userdb.Users.FirstOrDefault(u => u.UserName == Input.Email);

// Claims를 사용해서 사용자 정보 추가로 저장해서 쉽게 가져오기
var claims = new List<Claim>
{
    new Claim(ClaimTypes.Name, user.UserName),
    new Claim("AAA", user.AAA)
};

 

참고, Claim 객체 생성하는 방법, 아래 주석을 풀어 사용하면 된다.

나 같은 경우는 기존 로그인에 User.Identity를 먼저 저장하고 사용해서 아래 방법으로는 덮어써지지 않았다.

// ClaimsIdentity 객체 생성
//var identity = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);

// ClaimsPrincipal 객체 생성
//var principal = new ClaimsPrincipal(identity);

 

새로운 방법, 

Claim에 AddClaim을 사용하여 추가하는 방법을 이용.

foreach (var claim in claims)
{
    // 이미 claim이 있으면 삭제
    if ((await _userManager.GetClaimsAsync(user)).Any(c => c.Type == claim.Type))
    {
        await _userManager.RemoveClaimAsync(user, (await _userManager.GetClaimsAsync(user)).First(c => c.Type == claim.Type));
    }
    // 새 claim 추가
    await _userManager.AddClaimAsync(user, claim);
}

 

View 에서 불러올 때는 아래와 같이 하면 된다,

@using System.Security.Claims;
@{
    var AAA = ((ClaimsIdentity)User.Identity)?.FindFirst("AAA")?.Value;
}