![](/img/trans.png)
[英]ViewComponent does not recognize AspNetCore.Identity "User"
[英]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;
那里发生了什么事?
请
在“ AspNetRoles”表中查找正确的角色名称
看起来是“ AspNetUserRoles”表中的角色用户
从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.