.net - 在.net core中更新具有身份的用户角色而无需重新登录

标签 .net asp.net-core asp.net-identity

我使用以下代码更新用户的角色:

string UserID = User.FindFirstValue(ClaimTypes.NameIdentifier);
                var user = await _userManager.FindByIdAsync(UserID);
                
                var roles = await _userManager.GetRolesAsync(user);

                if (User.IsInRole(Roles.niveau1.ToString()))
                {
                    List<string> lstRolesASupprimer = new() { Roles.niveau1.ToString() };
                    List<string> lstRolesAAjouter = new() { Roles.niveau2.ToString() };
                    var result = await _userManager.RemoveFromRolesAsync(user, lstRolesASupprimer);
                    result = await _userManager.AddToRolesAsync(user, lstRolesAAjouter);
                }

问题是用户必须断开连接并重新连接才能激活新角色。是否可以立即更改用户角色?

谢谢

最佳答案

身份信息(roles,claims)在用户登录时放入cookie中。由于用户已经登录,因此这行代码_userManager.AddToRolesAsync(user, lstRolesAAjouter)将更新 db ,但不更新 cookie。您必须重新发出 cookie。

尝试添加

SignInManager.SignIn(user, false, false); 

之后

result = await _userManager.AddToRolesAsync(user, lstRolesAAjouter);

关于.net - 在.net core中更新具有身份的用户角色而无需重新登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72797432/

相关文章:

c# - C#.NET 中的程序集、模块和包之间的区别

asp.net-core - 使用自定义 JSON.NET JsonConverter 从 DescriptionAttribute 反序列化枚举停止工作

c# - 将纯文本密码迁移到 asp.net Identity 2.1

asp.net-core - 在 Visual Studio 之外获取 .NET Core 中所有使用过的 NuGet 包的许可证信息

asp.net-identity - 角色不起作用 - 错误地显示为用户不在角色中,.NET 6(从 .Net Core 3.2 升级)

asp.net-web-api - 如何使用 Web API 模板中的 AddExternalLogin 方法

c# - c# 最快的序列化机制是什么?

.net - 什么是 Visual Studio 2010 Shell?

.NET 属性与 Java 注释 : Which Came First?

c# - ASP.NET Core 2.0 如何在自定义验证属性中进行客户端验证?