我一直在尝试使用ASP.NET Core身份来检查数据库中的现有用户,并且当我在UserManager类上调用FindByEmailAsync或其他Find方法时,即使AspNetUsers DB表为空,它也会找到具有ID的实体< / p>
我已经仔细检查了Startup.cs文件,因为我几乎可以肯定DI是必需的。但是我在服务类中使用了EntityManager,并且该类已注册为Scoped。
我键入什么参数都没有关系,总是返回一些实体:
我的启动DI配置:
我的用户(来自IdentityUser):
我的服务注册(我通过DI使用UserManager的地方):
我希望这些方法不会找到任何用户实体,但是由于某种原因,它总是会返回非null值。
可能是身份缓存或DI问题?
答案 0 :(得分:3)
FindByEmailAsync
方法返回Task
,而不是用户。如果检查userExists
变量的类型,您将看到它的类型为Task<>
。因此,该方法不会返回ID为70的用户,而是ID为70的Task
用户。如果您修改以下行:
var userExists = _userManager.FindByEmailAsync("rasfafasf");
通过添加await
:
var userExists = await _userManager.FindByEmailAsync("rasfafasf");
您将获得任务的实际结果,即该电子邮件的用户(在您的情况下为null
)。