본문 바로가기

복습용 기술공부

Claim에 강제로 데이터 넣기

Claim을 사용하면 로그인 마다 데이터를 넣을 수 있다. 

특정 상황에서 claim을 넣어야 할 경우가 있다.

보안 상 문제가 있을 수 있지만, 아래와 같이 해결이 가능하다.

 

먼저 아래처럼 불러오고

private readonly SignInManager<유저정보DB> _signInManager;
private readonly UserManager<유저정보DB> _userManager;

 public 사용할Controller(UserManager<유저정보DB> userManager, SignInManager<유저정보DB> signInManager)
{
    _userManager = userManager;
    _signInManager = signInManager;
}

 

기존 코드에 한줄을 추가하면 된다.

// Claim 수정
var claims = new List<Claim>
{
    new Claim("불러올이름", 저장할것)
};

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

    // 쿠키, 클래임 강제로 업데이트
    await _signInManager.RefreshSignInAsync(user);
}

 

await _signInManager.RefreshSignInAsync(user);

이 줄을 추가하면 쿠키에 클레임이 강제로 업데이트 되고, 새로고침하면 가져올 수 있다.