更改角色后刷新声明主要内容

Spa*_*man 11 c# asp.net-identity .net-core asp.net-core-identity

我在改变dotnetcore身份中的角色时遇到了一些问题.

我有以下代码.

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);
}
Run Code Online (Sandbox Code Playgroud)

我无法更新ClaimsPrincipal.

我尝试过使用登录并注销.

如果我手动登录和退出,角色切换工作正常.

我一直在网上搜索,很多人说这应该工作:(

Spa*_*man 7

相反,我只需要做的就是将请求发回给令牌.

我不敢相信我没想到希望这有助于某人.

根据请求更新一些代码

// 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);
}
Run Code Online (Sandbox Code Playgroud)

  • 您能否添加必须更改的代码才能使其正常工作。 (2认同)