ASP.NET Core Identity UserManager Находит несуществующего пользователя с FindByEmailAsync - PullRequest
0 голосов
/ 30 марта 2019

Я пытался использовать ASP.NET Core Identity для проверки существующих пользователей в моей БД, и когда я вызываю FindByEmailAsync или другие методы Find в классе UserManager, он находит сущность с Id, хотя таблица БД AspNetUsers пуста

Я дважды проверил мой файл Startup.cs, потому что я почти уверен, что это должно быть что-то с DI.Но я использую этот EntityManager в своем классе обслуживания, и этот класс регистрируется как Scoped.

Не имеет значения, что я печатаю в параметре, всегда возвращает некоторую сущность:

Checking with any string

My Startup DI конфигурации:

Мой пользователь (происходит от IdentityUser): Checking with any string

Моя служба регистрации (где я использую UserManager через DI): Service container registration

Я ожидаю, что эти методы не найдут никаких пользовательских сущностей, но по какой-то причине они всегда возвращают ненулевые значения.

Могут ли быть проблемы с кэшированием идентичности или DI?

1 Ответ

3 голосов
/ 30 марта 2019

FindByEmailAsync метод возвращает Task, а не пользователя. Если вы проверите тип переменной userExists, вы увидите, что она имеет тип Task<>. Таким образом, метод возвращает не пользователя с идентификатором 70, а Task с идентификатором 70. Если вы измените эту строку:

var userExists = _userManager.FindByEmailAsync("rasfafasf");

добавив await:

var userExists = await _userManager.FindByEmailAsync("rasfafasf");

вы получите фактический результат Задачи, то есть пользователя с этим электронным письмом (null в вашем случае).

...