我正在开发一个 ASP.NET Core Identity 项目,其中有两种不同类型的用户:学生和教师。要求如下:
类似于 2 个登录系统。
public class ApplicationUser: IdentityUser
{
}
public class Student: ApplicationUser
{
}
public class Teacher: ApplicationUser
{
}
public class WorkNextDbContext: IdentityDbContext<ApplicationUser>
{
public WorkNextDbContext(DbContextOptions options) : base(options)
{
}
public virtual DbSet<Student> Students { get; set; }
public virtual DbSet<Teacher> Teachers { get; set; }
}
目前,我正在使用 ASP.NET Core Identity,它会在同一个
aspnetusers
表中生成两种用户类型。这会导致两种用户类型之间的用户名重复的问题。我认为角色在这种情况下不合适,因为这是两种完全不同的用户类型,具有不同的登录系统。
aspnetusers Table
身份证 | 鉴别器 | 用户名 |
---|---|---|
1 | 学生 | 阿里 |
2 | 老师 | 鲍勃 |
3 | 学生 | Bob - 错误,重复的用户名,用户名必须是唯一的,但身份核心在 1 个表中生成两种类型的用户 |
如何设置两个独立的登录系统,同时防止这些用户类型在同一个 aspnetusers 表中重叠并导致用户名冲突?有没有办法让学生和教师帐户在数据库中完全分开,或者有其他符合核心身份最佳实践的解决方法吗?
我认为你应该将这两个实体的所有内容分开。
单独的表和上下文:使用不同的表和上下文以避免用户名重复。
不同的身份验证流程:配置不同的登录控制器和视图。
自定义 Cookie 身份验证方案:通过使用单独的 Cookie 防止会话冲突。
基于角色的策略:限制学生和教师访问特定区域。
这将确保两个独立的登录系统,用户不会重叠。