我的测试代码用于创建新用户(如果不存在)。 并使用FindByEmailAsync()方法检查用户是否存在。 但它总是返回null,所以它创建了相同的许多用户。
public HomeController(
IUnitOfWork unitOfWork,
UserManager<User> userManager)
{
_unitOfWork = unitOfWork;
_userManager = userManager;
}
public async Task<IActionResult> Index()
{
var test = await _userManager.FindByEmailAsync("admin@admin.com");
if (test == null)
{
// Add the user
var newUser = new User
{
UserName = "mark",
Email = "admin@admin.com",
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;
无效,因为它创建了多个具有相同电子邮件地址的用户,但我没有看到任何错误。
我做错了什么?请告诉我。
答案 0 :(得分:12)
UserManager
内部实际上是在NormalizedEmail
列上进行搜索。我会查看数据库,看看是否正确填充。