UserManager.FindByEmailAsync
возвращает null
, но пользователь существует в базе данных.
Код ниже объясняет странную проблему:
var email = info.Principal.FindFirstValue(ClaimTypes.Email);
var test = new Data.ApplicationDbContext().Users.First(x => x.NormalizedEmail == email);
var usermail = await _userManager.FindByEmailAsync(email);
Console.WriteLine(test == null); //false
Console.WriteLine(usermail == null); //true
РЕДАКТИРОВАТЬ
Также через сам _userManager
получается нужный пользователь:
var test = _userManager.Users.FirstOrDefault(x => x.NormalizedEmail == email);
var usermail = await _userManager.FindByEmailAsync(email);
Console.WriteLine(test == null); //false
Console.WriteLine(usermail == null); //true
Следует отметить, что пользователь был создан не обычным способом, а с помощью Data-Seed (в OnModelCreating
):
protected override void OnModelCreating(ModelBuilder builder)
{
var users = new (string email, string name)[] {
("[email protected]", "admin")
};
var appUsers = users.Select(x => new ApplicationUser
{
Email = x.email,
NormalizedEmail = x.email,
NormalizedUserName = x.email,
UserName = x.email,
EmailConfirmed = true,
Id = Guid.NewGuid().ToString(),
SecurityStamp = Guid.NewGuid().ToString()
}).ToArray();
var role = new IdentityRole("Admins") { Id = Guid.NewGuid().ToString() };
var roleToUser = appUsers.Select(x => new IdentityUserRole<string> { RoleId = role.Id, UserId = x.Id });
builder.Entity<ApplicationUser>().HasData(appUsers);
builder.Entity<IdentityRole>().HasData(role);
builder.Entity<IdentityUserRole<string>>().HasData(roleToUser);
base.OnModelCreating(builder);
}
(await _userManager.FindByEmailAsync(email)) == new Data.ApplicationDbContext().Users.First(x => x.NormalizedEmail == email);
- person dovid   schedule 14.01.2019var email = info.Principal.FindFirstValue(ClaimTypes.Email);
возвращает адрес электронной почты, который используется для внешнего входа. Итак, вы создали пользователя с этим адресом электронной почты? - person TanvirArjel   schedule 14.01.2019ApplicationDbContext()
код? - person TanvirArjel   schedule 14.01.2019Users
точно так же, как и вы. Единственная разница между вашим запросом и тем, что делает UserStore, - это строка 1414, но это можно игнорировать, поскольку FindByEmail возвращает вамnull
. - person B12Toaster   schedule 15.01.2019Users
, установленный в DbContext, связан с классомUser
, зарегистрированным сIdentityUser
? Я имею в виду, что, возможно,_userManager
работает с совершенно другим набором баз данных или работает с InMemoryUserStore? - person B12Toaster   schedule 15.01.2019dbContext.Users.Count()
с_userManager.Users.Count()
, чтобы увидеть, отклоняются ли они? Или выполните свой запрос в наборе, управляемом UserManager:_userManager.Users.First(x => x.NormalizedEmail == email);
, и проверьте, дает ли это результат. Если нет, то ваш dbset отличается от того, с чем работает UserManager ... - person B12Toaster   schedule 15.01.2019Count()
? Гораздо больше!_userManager.Users.FirstOrDefault(x => x.NormalizedEmail == email)
верните желаемого пользователя ... редактирую вопрос, спасибо! - person dovid   schedule 15.01.2019Data-Seed
, поделитесь кодом. - person Edward   schedule 15.01.2019