userManager.FindByName 不返回角色



我正在使用OpenIddict进行令牌身份验证。昨天当我打电话给userManager.FindByNameAsync(request.Username)时,我得到了具有角色的用户。
今天我得到的角色属性计数 = 0 的用户。

我尝试使用 await userManager.GetRolesAsync(user); 加载角色,并得到计数为 3 的数组。这意味着用户具有角色。

我不知道发生了什么变化,但是如何使用FindByNameAsync功能加载用户的角色?

完整代码:

[HttpPost("token"), Produces("application/json")]
public async Task<IActionResult> Exchange(OpenIdConnectRequest request)
{
    Debug.Assert(request.IsTokenRequest(),
        "The OpenIddict binder for ASP.NET Core MVC is not registered. " +
        "Make sure services.AddOpenIddict().AddMvcBinders() is correctly called.");
    if (request.IsPasswordGrantType())
    {
        var user = await userManager.FindByNameAsync(request.Username);  //roles count is 0
        if (user == null)
        {
            return BadRequest(new OpenIdConnectResponse
            {
                Error = OpenIdConnectConstants.Errors.InvalidGrant,
                ErrorDescription = "The email/password couple is invalid."
            });
        }
        var roles = await userManager.GetRolesAsync(user);  //roles count is 3

但是如何使用 FindByNameAsync 函数加载具有角色的用户?

你不能(至少不实现你自己的IUserStore(。

在后台,出于性能原因,默认 ASP.NET 核心标识存储实现(基于 EF(不会急切加载与用户实体关联的导航属性,这就是不填充 Roles 属性的原因。

要加载与用户关联的角色,请使用 UserManager.GetRolesAsync(user);

相关内容

  • 没有找到相关文章

最新更新