FindByEmailAsync()始终返回null

时间:2016-09-14 15:59:23

标签: asp.net-core

我的测试代码用于创建新用户(如果不存在)。 并使用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;无效,因为它创建了多个具有相同电子邮件地址的用户,但我没有看到任何错误。

我做错了什么?请告诉我。

1 个答案:

答案 0 :(得分:12)

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