2017-02-01 14 views
10

Tôi đang gặp một số vấn đề với việc thay đổi vai trò trong nhận dạng dotnetcore.Yêu cầu làm mớiPrincipal sau khi thay đổi vai trò

Tôi có mã sau đây.

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

Tôi không thể yêu cầu ClaimsPrincipal cập nhật.

Tôi đã thử sử dụng đăng nhập và đăng xuất.

Nút chuyển đổi vai trò hoạt động tốt nếu tôi đăng nhập và đăng xuất theo cách thủ công.

Tôi đã được tìm kiếm trên web và rất nhiều người nói điều này nên làm việc :(

Trả lời

7

Thay annoyingly tất cả tôi phải làm là gửi mã thông báo lại với yêu cầu.

tôi không thể tin rằng tôi didn' t nghĩ về nó hy vọng điều này sẽ giúp một ai đó.

cập nhật với một số mã như yêu cầu

// 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

bạn có thể thêm mã y Bạn phải thay đổi để thực hiện công việc này. – TheBigSot

+0

@TheBigSot tôi đã thêm mã có liên quan :) – Spaceman

Các vấn đề liên quan