【问题标题】:AspNetCore.Identity RemoveFromRoleAsync does not remove role from userAspNetCore.Identity RemoveFromRoleAsync 不会从用户中删除角色
【发布时间】:2018-10-15 21:06:47
【问题描述】:

我正在使用 ASP.NET Core Identity 2.0.2。当我调用UserManager.RemoveFromRoleAsync 时,它不会从用户中删除角色。它说:

Microsoft.AspNetCore.Identity.UserManager:警告:用户 b651a459-5d6b-4239-88e6-facb33f11e87 不是管理员角色。

代码如下:

var userResult = await _userManager.RemoveFromRoleAsync(
    user,
    requestRole.ToReadableString());

我还尝试在RemoveFromRolesAsync 函数中将角色作为数组传递,但无济于事。

我没有看到任何其他方法可以从用户中删除角色。


更新

var roleResult = await _userManager
    .IsInRoleAsync(
        user,
        requestRole.ToReadableString());

var roleResult2 = await _userManager
    .IsInRoleAsync(
        user,
        "Administrator");

var roles = await _userManager
    .GetRolesAsync(user);

var userResult = await _userManager
    .RemoveFromRoleAsync(
        user,
        requestRole.ToReadableString());

roleResult 和 roleResult2 都是假的。
角色包含“管理员”。
如果我使用此用户登录,则该用户具有“管理员”角色。
所以授权属性说用户有这个角色:

[Authorize(Roles = "Administrator", AuthenticationSchemes = "Bearer")]

另一个测试:

var roles = await _userManager
    .GetRolesAsync(user);

foreach (string role in roles)
{
    var roleTempResult = await _userManager
        .IsInRoleAsync(
            user,
            role);
}

方法 IsInRoleAsync() 为从 GetRolesAsync(user) 返回的所有角色返回 false;
那里发生了什么?

【问题讨论】:

  • 您是否尝试过在尝试删除之前先检查用户是否处于角色中。
  • 对于错误消息,它说用户不在Administrator。您可以尝试检查用户是否具有requestRole 角色。共享数据库中的记录。

标签: c# asp.net-core asp.net-core-identity


【解决方案1】:

  1. 在“AspNetRoles”表中查找正确的角色名称

  2. 查看“AspNetUserRoles”表中角色的用户

  3. 从 RemoveFromRoleAsync 中的“AspNetRoles”中指定角色名称

【讨论】:

  • 我使用枚举作为角色名称,所以它也使用它来添加角色,这样我的名称中就没有提示。我还检查了数据库并且用户具有此角色。在 UI 中,它显示用户具有管理员角色。
【解决方案2】:

您必须在 RemoveFromRoleAsync 方法中使用“RoleName”而不是“RoleId”。

await _userManager.RemoveFromRoleAsync(user,"Administrator");

【讨论】:

    猜你喜欢
    • 2021-08-12
    • 2023-03-16
    • 2011-07-23
    • 1970-01-01
    • 2021-07-31
    • 2017-03-06
    • 2019-05-28
    • 2022-10-17
    • 2017-04-25
    相关资源
    最近更新 更多