FindByEmailAsync()总是返回null
问题描述:
我的测试代码用于在不存在的情况下创建新用户。 ,它使用FindByEmailAsync()方法检查用户是否存在。 但它总是返回null,所以它创建了相同的许多用户。FindByEmailAsync()总是返回null
public HomeController(
IUnitOfWork unitOfWork,
UserManager<User> userManager)
{
_unitOfWork = unitOfWork;
_userManager = userManager;
}
public async Task<IActionResult> Index()
{
var test = await _userManager.FindByEmailAsync("[email protected]");
if (test == null)
{
// Add the user
var newUser = new User
{
UserName = "mark",
Email = "[email protected]",
Created = DateTime.Now,
Updated = DateTime.Now
};
_unitOfWork.UserRepository.Insert(newUser);
_unitOfWork.Save();
// password is 'admin'
await _userManager.CreateAsync(newUser, "admin");
}
return View();
}
这里是我的startup.cs
public void ConfigureServices(IServiceCollection services)
{
// add Identity
services.AddIdentity<User, IdentityRole>(config =>
{
config.User.RequireUniqueEmail = true;
config.Password.RequiredLength = 4;
config.Cookies.ApplicationCookie.LoginPath = "/Auth/Login";
})
.AddEntityFrameworkStores<MyContext>();
/// ...
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseIdentity();
/// ...
}
而且config.User.RequireUniqueEmail = true;
不工作,因为它创建多个用户使用同一个电子邮件地址,但我没有看到任何错误。
我在做什么错?请建议我。
答
在内部,UserManager
实际上是在NormalizedEmail
列上进行搜索。我会查看数据库,看看是否正确填充或不填充。