【问题标题】:UserManager<User> does not find a existing user in database asp.net core IdentityUserManager<User> 在数据库 asp.net core Identity 中找不到现有用户
【发布时间】:2019-03-16 15:50:44
【问题描述】:

我有 ASP.NET Core 2.1 MVC 应用程序。同样在数据库中,我有 1 个用户角色为“Admin”,但是当我尝试获取数据库中的用户列表时,它返回一个空列表。它通常从“Roles”和“UserRoles”表返回数据,但看不到任何“用户”表中的数据,因此我不能使用 SignInAsync 或 PasswordSignInAsync 方法。 这是我的 dbContext:

public class AppDbContext : IdentityDbContext<User, Role, string>
{
    public AppDbContext(DbContextOptions<AppDbContext> options):base(options)
    { }

    // ...
}

这是我的启动:

services.AddDbContext<AppDbContext>(options =>
{
    options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"));
});

services.AddIdentity<User, Role>()
    .AddEntityFrameworkStores<AppDbContext>()
    .AddDefaultTokenProviders();

// ...

【问题讨论】:

  • 当你说它通常返回数据时,你到底是什么意思?你的意思是它曾经返回数据,你改变了一些东西,现在它不再返回数据?
  • 请添加您希望看到的内容以及您目前得到的内容以及任何错误。
  • @CodingYoshi 它从“Roles”和“UserRoles”表中返回数据,但无法从“Users”表中检索到任何用户
  • @BlooB 它不会抛出任何错误,我希望得到一个包含 1 个元素的 List,但它返回一个包含 0 个元素的列表。
  • 你怎么知道它无法从用户表中检索到任何用户?检索代码在哪里?

标签: c# asp.net asp.net-core-2.1 asp.net-core-identity


【解决方案1】:

确保 NORMALIZEDUSERNAME 和 NORMALIZEDEMAIL 的电子邮件值和用户名的大写值相同。

【讨论】:

  • 这是我在手动植入身份用户后忘记的。愚蠢的身份框架。
【解决方案2】:

发生在我身上的问题如下:

我是通过实体用户直接插入用户,而不是通过 UserManager 方法中的 CreateAsync。

这绕过了任何计算 PasswordHash、SecurityStamp 和数据库中其他字段的例程,因此 PasswordSignInAsync 无法正常工作。

【讨论】:

    猜你喜欢
    • 2019-08-21
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 2018-12-13
    • 2014-12-09
    • 1970-01-01
    • 2021-07-25
    相关资源
    最近更新 更多