userManager.FindByName 没有 return 角色
userManager.FindByName does not return roles
我正在使用 OpenIddict for token authentication。昨天,当我打电话给 userManager.FindByNameAsync(request.Username)
时,我得到了具有角色的用户。
今天我得到角色 属性 count = 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
but how can I load user with roles with FindByNameAsync function?
你不能(至少不能不实现你自己的 IUserStore
)。
在幕后,默认 ASP.NET 核心身份存储实现(基于 EF)出于性能原因不会急切加载与用户实体关联的导航属性,这就是 Roles
属性 未填充。
要加载与用户关联的角色,请使用 UserManager.GetRolesAsync(user);
。
我正在使用 OpenIddict for token authentication。昨天,当我打电话给 userManager.FindByNameAsync(request.Username)
时,我得到了具有角色的用户。
今天我得到角色 属性 count = 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
but how can I load user with roles with FindByNameAsync function?
你不能(至少不能不实现你自己的 IUserStore
)。
在幕后,默认 ASP.NET 核心身份存储实现(基于 EF)出于性能原因不会急切加载与用户实体关联的导航属性,这就是 Roles
属性 未填充。
要加载与用户关联的角色,请使用 UserManager.GetRolesAsync(user);
。