繁体   English   中英

AspNetCore.Identity RemoveFromRoleAsync 不会从用户中删除角色

[英]AspNetCore.Identity RemoveFromRoleAsync does not remove role from user

我正在使用 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 function 中将角色作为数组传递,但无济于事。

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


更新

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

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

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

  2. 看起来是“ AspNetUserRoles”表中的角色用户

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

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

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

我也遇到了这个确切的问题。

问题是我传递给所有这些函数的用户不是一个完整的 IdentityUser。 它是 IdentityUser 的一个实例,具有正确的 Id、UserName 和 Email,但在之前的过程中检索用户时,其他值(如 NormalizedEmail、NormalizedUserName 和 PasswordHash)已被丢弃。

一旦我将检索过程更改为不转换从 GetUsersInRoleAsync 返回的用户,(我一直在根据返回的用户使用新的 IdentityUser 实例填充一个列表,并且只设置我需要的值。更改它以使用实际返回的填充列表用户修复了问题),IsInRoleAsync 和 RemoveFromRoleAsync 按预期工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM