簡體   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