asp.net 核心 2.0 标识实体框架用户未保存



我正在尝试在我的应用程序中实现基本身份验证。用户应存储在 postgresql 数据库中。

我可以创建一个用户,但我不知道它存储在哪里。它没有存储在我的数据库中。但是所有创建的用户都被存储并从UserManager访问。重新启动后,创建的用户仍然存在。所以它没有存储在我的数据库或内存中。

我使用此部分来启用具有实体框架的标识。

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

UserRole 类只是从 IdentityUserIdentityRole 扩展而来,Guid 作为键类型。

我将npgsql用于数据库。我很确定它正在工作,因为迁移已正确迁移:

var connectionString = Configuration.GetConnectionString("DatabaseContext");
services.AddEntityFrameworkNpgsql()
    .AddDbContext<DatabaseContext>(options => options.UseNpgsql(connectionString));

为了创建和获取用户,我在控制器中注入Microsoft.AspNetCore.Identity.UserManager<User>

为什么用户不存储在我的数据库中?

UserManager<TUser>将寻找注入的IUserStore<TUser>。这就是它持久保存用户并与数据库聊天的方式。可在此处找到用户存储的默认实现。默认情况下,此实现希望直接注入DbContext

事情我会尝试:

  • 确保数据库上下文继承自IdentityDbContext
  • 从服务集合中请求IUserStore,并查看 Context 属性以查看它正在使用的数据库上下文。

如果您绝对确定您的用户不会进入您的数据库,那么IUserStore<TUser>必须使用与您正在使用的上下文不同的上下文。如果是这种情况,请删除其他上下文或将更具体的IUserStore版本添加到服务集合。例如:将服务中的IUserStore<TUser>替换为 UserStore<TUser, IdentityRole, DatabaseContext, string> 。(请注意,我们在那里指定DatabaseContext,而不是基类DbContext (

相关内容

  • 没有找到相关文章

最新更新