2016-09-14 138 views
1

我的测试代码用于在不存在的情况下创建新用户。 ,它使用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;不工作,因为它创建多个用户使用同一个电子邮件地址,但我没有看到任何错误。

我在做什么错?请建议我。

回答

5

在内部,UserManager实际上是在NormalizedEmail列上进行搜索。我会查看数据库,看看是否正确填充或不填充。