加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-core – userManager.FindByName不返回角色

发布时间:2020-12-16 07:06:58 所属栏目:asp.Net 来源:网络整理
导读:我正在使用 OpenIddict for token authentication.昨天当我调用userManager.FindByNameAsync(request.Username)时,我得到了带角色的用户. 今天我得到Roles属性count = 0的用户. 我试图加载角色,等待userManager.GetRolesAsync(user);我得到数量为3的数组.这
我正在使用 OpenIddict for token authentication.昨天当我调用userManager.FindByNameAsync(request.Username)时,我得到了带角色的用户.
今天我得到Roles属性count = 0的用户.

我试图加载角色,等待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

解决方法

but how can I load user with roles with FindByNameAsync function?

你不能(至少没有实现你自己的IUserStore).

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读