簡體   English   中英

管理員聲明已添加到IdentityUser中,但usermanager不能通過IsInRoleAsync找到它

[英]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字段,而不是對象本身。

MSDN

我已經通過使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM