Asp.net 身份验证错误
Posted
技术标签:
【中文标题】Asp.net 身份验证错误【英文标题】:Asp.net Identity Validation Error 【发布时间】:2013-11-28 11:06:57 【问题描述】:我想将 IdentityContext 与 mydbcontext 集成,但我遇到了这个错误
在模型生成过程中检测到一个或多个验证错误:
Ivdb.Dal.Concrete.EFCodeFirst.IdentityUserLogin: : EntityType 'IdentityUserLogin' 没有定义键。定义此 EntityType 的键。 Ivdb.Dal.Concrete.EFCodeFirst.IdentityUserRole: : EntityType 'IdentityUserRole' 没有定义键。定义此 EntityType 的键。 IdentityUserLogins:EntityType:EntitySet 'IdentityUserLogins' 基于没有定义键的类型'IdentityUserLogin'。 IdentityUserRoles: EntityType: EntitySet 'IdentityUserRoles' 基于没有定义键的类型'IdentityUserRole'。
我该如何解决这个问题?
代码:
public partial class ivdbDb156978Context : IdentityDbContext<ApplicationUser>
static ivdbDb156978Context()
Database.SetInitializer<ivdbDb156978Context>(null);
public ivdbDb156978Context()
: base("Name=ivdbContext")
public DbSet<Car> Cars get; set;
应用用户
public class ApplicationUser : IdentityUser
【问题讨论】:
【参考方案1】:您的代码没有显示这一点,但根据您收到的错误,我假设您正在覆盖 OnModelCreating。这是 IdentityDbContext<ApplicationUser>
配置实体框架映射的地方。这意味着,如果您想覆盖 OnModelCreating,您需要调用 base 或者您必须自己进行映射。
所以要么这样:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
base.OnModelCreating(modelBuilder);
// your stuff here
或者你做映射:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId);
modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id);
modelBuilder.Entity<IdentityUserRole>().HasKey(r => new r.RoleId, r.UserId );
【讨论】:
我确信我可以在需要时在 *** 中找到有关 EF Code First 方法的正确答案。谢谢 我在 OnModelCreating 上创建了一个覆盖,所以我可以添加 modelBuilder.Conventions.Remove如果您不想调用 base.OnModelCreating 并希望自己进行映射,您的映射应如下所示:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id).Property(p => p.Name).IsRequired();
modelBuilder.Entity<IdentityUserRole>().HasKey(r => new r.RoleId, r.UserId );
modelBuilder.Entity<IdentityUserLogin>().HasKey(u => new u.UserId, u.LoginProvider, u.ProviderKey);
如果您仅将 IdentityUserLogin 的密钥放在 UserId 上,则在使用默认的 google 登录时会出现 DbEntityValidationExceptions。
【讨论】:
【参考方案3】:关键是你不能有一个空的 OnModelCreating
好
protected override void OnModelCreating(DbModelBuilder modelBuilder)
base.OnModelCreating(modelBuilder);
// your stuff here
不好
protected override void OnModelCreating(DbModelBuilder modelBuilder)
// base.OnModelCreating(modelBuilder);
// your stuff here
【讨论】:
以上是关于Asp.net 身份验证错误的主要内容,如果未能解决你的问题,请参考以下文章
JWT 身份验证始终返回 401 HTTP 错误 asp.net core
ASP.NET Core JWT/Windows 身份验证 HTTP 400 错误
Thingsboard - REST API 上的身份验证错误(来自 Curl 命令和 ASP.NET)
ASP.NET Core API 使用 JWT 不记名令牌进行身份验证
ASP.NET Core JWT 身份验证以保护 webAPI [Authorize] 属性错误 401 Unauthorized