[英]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.