2017-02-01 21 views
10

Mam pewne problemy ze zmianą roli w tożsamości dotnetcore.Orzeźwiające roszczeniaPrzydzielenie po zmianie ról

Mam następujący kod.

private async Task SetRoleToX(ClaimsPrincipal claimsPrincipal, string X) 
{ 
    var currentUser = await UserManager.GetUserAsync(claimsPrincipal); 
    var roles = await UserManager.GetRolesAsync(currentUser); 

    await UserManager.RemoveFromRolesAsync(currentUser, roles); 
    await UserManager.AddToRoleAsync(currentUser, X); 
    await SignInManager.RefreshSignInAsync(currentUser); 
} 

Nie mogę pobrać ClaimsPrincipal do aktualizacji.

Próbowałem użyć logowania i wylogowania.

Przełącznik roli działa poprawnie, jeśli ręcznie loguję się i wylogowuję.

I zostały poszukiwania w internecie i dużo ludzi mówi, to powinno działać :(

Odpowiedz

7

Raczej irytująco wszystko, co musiałem zrobić, to wysłać token z powrotem z żądania.

Nie mogę uwierzyć, że nie zrobił” t myśleć o tym nadzieję, że ktoś pomoże.

Aktualizacja z kodem na wniosek

// In controller 

public async Task SwapRole([FromBody]RoleSwapRequestDto dto) 
{ 
    await _service.SwapRole(
     User, 
     dto.RoleName 
    ); 

    return await AddCookieToResponse(); 
} 

private async Task AddCookieToResponse() 
{ 
    // Make your token however your app does this (generic dotnet core stuff.) 
    var response = await _tokenService.RegenToken(User); 

    if (response.Data != null && response.Data.Authenticated && response.Data.TokenExpires.HasValue) 
    { 
     Response.Cookies.Append(AuthToken, response.Data.Token, new CookieOptions 
     { 
      HttpOnly = false, 
      Expires = response.Data.TokenExpires.Value 
     }); 
    } 

    return response; 
} 

/// inside _service 
public async Task SwapRole(ClaimsPrincipal claimsPrincipal, string X) 
{ 
    var currentUser = await UserManager.GetUserAsync(claimsPrincipal); 
    var roles = await UserManager.GetRolesAsync(currentUser); 

    await UserManager.RemoveFromRolesAsync(currentUser, roles); 
    await UserManager.AddToRoleAsync(currentUser, X); 
    await SignInManager.RefreshSignInAsync(currentUser); 
} 
+1

mógłbyś dodać kod y Musiałeś się zmienić, żeby to zadziałało. – TheBigSot

+0

@TheBigSot Dodałem odpowiedni kod :) – Spaceman