[英]Admin claim added to IdentityUser, but the usermanager does not find it with IsInRoleAsync
我有一段代码,可以让管理员通过电子邮件添加新的管理员。 我检查用户是否在我们的系统中。 如果是,我检查它是否已经是管理员。 奇怪的是,已经拥有声明“ admin”的用户仍将被添加为管理员,从而有效地在数据库中为他们提供了另一个相同的声明。 经过一些调试后,我发现IsInRoleAsync将始终返回false。 这可能是什么原因?
public async Task<IActionResult> VoegAdminToe(VoegAdminToeViewModel vam)
{
if (ModelState.IsValid)
{
Gebruiker g = _gebruikerRepository.GetByEmail(vam.Email);
if (g != null)
{
bool isAdmin = await _userManager.IsInRoleAsync(g, "admin");
if (!isAdmin)
{
await _userManager.AddClaimAsync(g, new Claim(ClaimTypes.Role, "admin"));
return RedirectToAction(nameof(Index));
}
ModelState.AddModelError("GebruikerAlAdmin", "Deze gebruiker is al Admin");
return View(vam);
}
ModelState.AddModelError("GebruikerNull","Deze gebruiker zit niet in het systeem");
return View(vam);
}
else
{
return View(vam);
}
}
我的猜测是,函数IsInRoleAsync不会在表AspNetUserClaims中查找,但是我不确定是否还有另一种方法可以检查此问题。
IsInRoleAsync在您的情况下失败,因为您传递的是整个对象,而不是UserId。
bool isAdmin = await _userManager.IsInRoleAsync(g, "admin");
因此,您实际上应该传递Gebruiker
对象的UserId字段,而不是对象本身。
我已经通过使用GetClaimsAsync解决了该问题:
IList<Claim> claimsUser = await _userManager.GetClaimsAsync(g);
bool isAdmin = claimsUser.FirstOrDefault(c => c.Value == "admin") != null;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.