2014-01-20 62 views
12

我努力学习Asp.Net身份和 在这个tutorialMVC 5:我应该从IdentityUser类继承我的用户吗?

创建一个实体框架代码的第一个TODO模型在模型\ AppModels,CS部分MyUser类从IdentityUser类 继承和IdentityDbContext<MyUser>MyDbContext继承类。这是为什么?

假设我有一个User类,它包含我的Web应用程序的用户的所有信息,如果该类继承自IdentityUser,并且我的DbContext应该从IdentityDbContext<User>继承吗?

此外,什么是inheritng的DbContext类的从IdentityDbContext<TClass>通过纯DbContext类的优势,如MVC 4做

+2

最简单的答案是,如果您从IdentityUser和IdentityDbContext继承,您还可以使用Microsoft的UserStore类来管理持久性,而无需额外的工作。否则,你会从头开始实现你自己的UserStore,这真的不是太难。 – OdeToCode

回答

19

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

有几个专门为这个

FROM Scott Allen Article

enter image description here

IUSER

用户对象必须实现IUSER接口,这需要每个 用户界面至少有一个ID和一个名字。 IUser最显着的方面是string类型的Id属性。字符串适用于GUID ,但在使用整数键时可能会有点棘手,这与SQL Server的 相同。更多详细信息在未来的帖子。

IUserStore

的我在核心身份总成*存储接口因素提供的功能性的各种水平。

IUserStore定义了用户想要的最低功能 - 创建,检索,更新和删除(CRUD)功能。如果您的 网站想要允许用户使用密码创建本地帐户,您将需要一个实现IUserPasswordStore的组件(这是一个 IUserStore)。对于第三方登录(Twitter和Facebook,例如 示例),请添加IUserLoginStore,并且声明存储空间为IUserClaimStore 。另外,在上面的类图中没有显示,角色的接口(IRole,IUserRoleStore等)的集合是 。让角色与索赔开始讨论。

的UserManager

的的UserManager是一个具体的类,它是提供域逻辑用于与用户信息的工作的UserManager。 UserManager知道何时散列密码,何时验证用户以及如何管理声明。

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

记住一个IUserStore不知道如何处理用户密码,只有一个IUserPasswordStore知道密码。 UserManager知道不同的核心接口,并将尝试使用构造函数中给出的存储对象的功能。例如,如果使用FindByIdAsync,UserManager可以使用用户存储按ID查询用户,但如果调用FindAsync(需要用户名和密码),并且底层存储没有实现IUserPassword存储接口, UserManager将被迫抛出异常。

对于从用户到密码到声明的所有内容,使用单个具体类很困难,必须进行折衷。我们也会看看即将发布的帖子中的一些权衡。

编辑:退房Implementing ASP.Net Identity

现在ASP.Net身份支持泛型IdentityUser<TKey>这是一个字符串之前,即用户ID是一个字符串

+0

对于Id部分,IUser具有字符串类型的Id,如果我在我的用户类中重写它并创建新用户,该Id将如何分配? – Cybercop

+1

您可能想要查看下一版Identity框架的预发布NuGet。此版本使用IdentityUser ,其中TKey指定主键的类型并允许使用int。 – OdeToCode

2

的IdentityDbContext <>类是从的DbContext继承的类就像通常那样做,但为角色和用户提供了现成的DbSets。

见类文档浏览: http://msdn.microsoft.com/en-us/library/microsoft.aspnet.identity.entityframework.identitydbcontext%28v=vs.111%29.aspx

是的,你的用户DTO应该从IdentityUser继承和与用户相关的任何其他所需的字段在数据库中可以添加到这个类。

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

相关问题