ASP.NET Core身份UserManager使用FindByEmailAsync查找不存在的用户

时间:2019-03-30 13:26:18

标签: c# asp.net-core asp.net-identity asp.net-core-webapi

我一直在尝试使用ASP.NET Core身份来检查数据库中的现有用户,并且当我在UserManager类上调用FindByEmailAsync或其他Find方法时,即使AspNetUsers DB表为空,它也会找到具有ID的实体< / p>

我已经仔细检查了Startup.cs文件,因为我几乎可以肯定DI是必需的。但是我在服务类中使用了EntityManager,并且该类已注册为Scoped。

我键入什么参数都没有关系,总是返回一些实体:

Checking with any string

我的启动DI配置:

我的用户(来自IdentityUser): Checking with any string

我的服务注册(我通过DI使用UserManager的地方): Service container registration

我希望这些方法不会找到任何用户实体,但是由于某种原因,它总是会返回非null值。

可能是身份缓存或DI问题?

1 个答案:

答案 0 :(得分:3)

FindByEmailAsync方法返回Task,而不是用户。如果检查userExists变量的类型,您将看到它的类型为Task<>。因此,该方法不会返回ID为70的用户,而是ID为70的Task用户。如果您修改以下行:

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

通过添加await

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

您将获得任务的实际结果,即该电子邮件的用户(在您的情况下为null)。