我正在努力学习Asp.Net Identity和 在此tutorial,
在Models \ AppModels中创建实体框架代码第一个ToDo模型,cs 部分MyUser
类
继承自IdentityUser
类,MyDbContext
继承自IdentityDbContext<MyUser>
类。这是为什么?
假设我有一个User
类,它包含我的Web应用程序用户的所有信息,如果该类继承自IdentityUser,我的DbContext
是否应该继承自IdentityDbContext<User>
?
此外,从IdentityDbContext<TClass>
继承dbcontext类比在MVC 4中完成的普通DbContext
类有什么优势
答案 0 :(得分:20)
ASP.Net MVC 5.0使用OWIN实现即插即用。
为此
设计了几个接口
<强> IUSER 强>
用户对象必须实现IUser接口,这需要每个接口 用户至少拥有一个ID和一个名称。最值得注意的方面 IUser是string类型的Id属性。字符串适用于GUID 但是当使用整数作为键时,可能会有点棘手 SQL Server。未来帖子中的更多细节。
<强> IUserStore 强>
Core Identity程序集中的I * Store接口被考虑用于提供各种级别的功能。
IUserStore定义了您希望用户使用的最低功能 - 创建,检索,更新和删除(CRUD)功能。如果你的 网站希望允许用户使用密码创建本地帐户, 你需要一个实现IUserPasswordStore的组件(这是一个 IUserStore)。对于第三方登录(Twitter和Facebook,for 例如),添加IUserLoginStore,并且对于索赔存储,有一个 IUserClaimStore。另外,在上面的类图中没有显示,是 角色接口集合(IRole,IUserRoleStore等)。让 关于角色与主张的辩论开始了。
<强>的UserManager 强>
UserManager是一个具体的类,UserManager提供用于处理用户信息的域逻辑。 UserManager知道何时散列密码,何时验证用户以及如何管理声明。
UserManager有一些扩展点,例如,管理器有许多属性可用于设置自定义用户验证器(任何实现IIdentityValidator的对象),自定义密码验证器和自定义密码哈希。主要的可扩展性点是通过UserManager构造函数,它允许您传入任何实现IUserStore的对象。如果您想使用UserManager来管理存储在SQL Server中的用户信息,我们将在后面的文章中查看预构建的类,但是创建一个IUserStore来处理文档数据库或其他也很容易。存储形式。
请记住,IUserStore不知道如何使用用户密码,只有IUserPasswordStore知道密码。 UserManager知道不同的核心接口,并将尝试使用构造函数中给出的store对象的功能。例如,如果使用FindByIdAsync,则UserManager可以使用用户存储按ID查询用户,但是如果调用FindAsync(使用用户名和密码),并且底层存储未实现IUserPassword存储接口,将强制UserManager抛出异常。
使用单个具体类来处理从用户到密码到声明的所有内容都很棘手,并且必须进行权衡。我们还将看一下即将发布的帖子中的一些权衡。
编辑:查看Implementing ASP.Net Identity
现在,ASP.Net标识在它是一个字符串之前支持泛型IdentityUser<TKey>
,即UserId是一个字符串
答案 1 :(得分:2)
IdentityDbContext&lt;&gt; class是一个像往常一样从DbContext继承的类,但为角色和用户提供了现成的DbSet。
是的,您的用户dto应该从IdentityUser继承,并且您的数据库中与您的用户关联的任何其他字段都可以添加到该类中。
这使得向数据库添加与用户关联的其他字段变得更加容易,如果您正在使用Entity Framework迁移和数据库初始化,则意味着您现在可以从DbContext生成整个Identity数据库。