gpt4 book ai didi

c# - 更改角色后刷新 claimsPrincipal

转载 作者:可可西里 更新时间:2023-11-01 08:46:39 25 4
gpt4 key购买 nike

我在更改 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);
}

我无法更新 ClaimsPrincipal。

我尝试过使用登录和退出。

如果我手动登录和注销,角色切换工作正常。

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

最佳答案

相当烦人的是,我所要做的就是将 token 与请求一起发回。

我不敢相信我没有想到它希望这对某人有帮助。

根据要求更新一些代码

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

关于c# - 更改角色后刷新 claimsPrincipal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41976527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com