userManager.FindByName не возвращает роли
Я использую OpenIddict для аутентификации токена. Вчера звоню userManager.FindByNameAsync(request.Username)
Я получаю пользователя с ролями.
Сегодня я получаю пользователя со значением свойства Roles = 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
1 ответ
но как я могу загрузить пользователя с ролями с помощью функции FindByNameAsync?
Вы не можете (по крайней мере, не реализовать свой собственный IUserStore
).
Внутренняя реализация хранилища удостоверений ASP.NET по умолчанию (на основе EF) по умолчанию не загружает свойства навигации, связанные с сущностью пользователя, из соображений производительности, поэтому Roles
собственность не заселена.
Чтобы загрузить роли, связанные с пользователем, используйте UserManager.GetRolesAsync(user);
,