MVC 5:我应该从IdentityUser类inheritance我的用户吗?

我试图学习Asp.Net Identity,在本教程中 ,

在Models \ AppModels中创建entity framework代码First ToDo模型,cs部分MyUser类inheritance自IdentityUser类, MyDbContextinheritance自IdentityDbContext类。 这是为什么?

假设我有一个User类,它包含我的Web应用程序用户的所有信息,如果该类inheritance自IdentityUser,我的DbContext是否应该inheritanceIdentityDbContext

另外,如同在MVC 4中一样,从IdentityDbContextinheritancedbcontext类到普通DbContext类的优点是什么?

ASP.Net MVC 5.0使用OWIN实现即插即用。

为此设计了几个接口

FROM Scott Allen Article

在此处输入图像描述

IUSER

用户对象必须实现IUser接口,这要求每个用户至少拥有一个ID和一个名称。 IUser最值得注意的方面是string类型的Id属性。 字符串适用于GUID,但在使用键的整数时可能有点棘手,这与SQL Server一样。 未来post中的更多细节。

IUserStore

Core Identity程序集中的I * Store接口被考虑用于提供各种级别的function。

IUserStore定义了您希望用户使用的最低function – 创建,检索,更新和删除(CRUD)function。 如果您的网站想要允许用户使用密码创建本地帐户,您将需要一个实现IUserPasswordStore的组件(这是一个IUserStore)。 对于第三方登录(例如Twitter和Facebook),添加IUserLoginStore,对于索赔存储,有一个IUserClaimStore。 此外,未在上面的类图中显示,是角色的接口集合(IRole,IUserRoleStore等)。 让关于角色与主张的辩论开始。

的UserManager

UserManager是一个具体的类,它是UserManager,它提供用于处理用户信息的域逻辑。 UserManager知道何时哈希密码,何时validation用户以及如何管理声明。

UserManager有一些扩展点,例如,管理器有许多属性可用于设置自定义用户validation器(任何实现IIdentityValidator的对象),自定义密码validation器和自定义密码哈希。 主要的可扩展性点是通过UserManager构造函数,它允许您传入任何实现IUserStore的对象。 如果您想使用UserManager来管理存储在SQL Server中的用户信息,我们将在后面的文章中查看预构建的类,但也可以轻松创建IUserStore来处理文档数据库或其他存储forms。

请记住,IUserStore不知道如何使用用户密码,只有IUserPasswordStore知道密码。 UserManager知道不同的核心接口,并将尝试使用构造函数中给出的store对象的function。 例如,如果使用FindByIdAsync,UserManager可以使用用户存储按ID查询用户,但是如果调用FindAsync(使用用户名和密码),并且底层存储未实现IUserPassword存储接口, UserManager将被强制抛出exception。

使用单个具体类来处理从用户到密码到声明的所有内容都很棘手,并且必须进行权衡。 我们还将看一下即将发布的post中的一些权衡。

编辑:检查实现ASP.Net标识

现在ASP.Net标识在它是一个字符串之前支持通用的IdentityUser ,即UserId是一个字符串

IdentityDbContext <>类是一个像往常一样继承自DbContext的类,但为角色和用户提供了现成的DbSet。

请参阅此处的课程文档: http : //msdn.microsoft.com/en-us/library/microsoft.aspnet.identity.entityframework.identitydbcontext%28v=vs.111%29.aspx

是的,您的用户dto应该从IdentityUserinheritance,并且可以将与您的用户关联的数据库中所需的任何其他字段添加到该类。

这使得向数据库添加与用户关联的其他字段变得更加容易,如果您正在使用Entity Framework迁移和数据库初始化,则意味着您现在可以从DbContext生成整个Identity数据库。