如何在没有实体框架的情况下使用ASP.NET Identity 3.0

时间:2015-08-03 20:02:16

标签: asp.net asp.net-core asp.net-identity-3

我现在看到的ASP.NET Identity 3.0的所有示例都使用Entity Framework来存储与用户相关的数据。

是否有任何示例不使用实体框架且ApplicationUser类不是从Microsoft.AspNet.Identity.EntityFramework.IdentityUser派生的?

在ASP.NET Identity 2.x中,需要实现IUser接口。现在似乎没有这样的界面 - 所以我们不确定如何正确定义User类。几乎没有关于这个主题的文件。

第二个问题是在AddIdentity中调用Startup.ConfigureServices。它与Microsoft.AspNet.Identity.EntityFramework命名空间中的特定类非常相关,并且不清楚如何在没有这些类的情况下注册身份服务。

2 个答案:

答案 0 :(得分:12)

我已经在我的项目中实现了它,你需要实现的主要内容是UserStore和RoleStore

我的SiteUser和SiteRole类不从任何内容继承

主要是在让asp.net身份添加自己的服务之前添加自己的服务

services.TryAdd(ServiceDescriptor.Scoped<IUserStore<SiteUser>, UserStore<SiteUser>>());
services.TryAdd(ServiceDescriptor.Scoped<IUserPasswordStore<SiteUser>, UserStore<SiteUser>>());
services.TryAdd(ServiceDescriptor.Scoped<IUserEmailStore<SiteUser>, UserStore<SiteUser>>());
services.TryAdd(ServiceDescriptor.Scoped<IUserLoginStore<SiteUser>, UserStore<SiteUser>>());
services.TryAdd(ServiceDescriptor.Scoped<IUserRoleStore<SiteUser>, UserStore<SiteUser>>());
services.TryAdd(ServiceDescriptor.Scoped<IUserClaimStore<SiteUser>, UserStore<SiteUser>>());
services.TryAdd(ServiceDescriptor.Scoped<IUserPhoneNumberStore<SiteUser>, UserStore<SiteUser>>());
services.TryAdd(ServiceDescriptor.Scoped<IUserLockoutStore<SiteUser>, UserStore<SiteUser>>());
services.TryAdd(ServiceDescriptor.Scoped<IUserTwoFactorStore<SiteUser>, UserStore<SiteUser>>());
services.TryAdd(ServiceDescriptor.Scoped<IRoleStore<SiteRole>, RoleStore<SiteRole>>());

一些相同的interfsaces将在这里注册,但如果他们首先注册,它将使用你的

services.AddIdentity<SiteUser, SiteRole>();

答案 1 :(得分:2)

  

是否有任何示例不使用EntityFramework且ApplicationUser类不是从Microsoft.AspNet.Identity.EntityFramework.IdentityUser派生的?

由于ASP.NET Identity 3是.NET Framework 5的一部分,但尚未发布,我猜您将找不到任何示例。

  

在ASP.NET Identity 2.x中,需要实现IUser接口。现在似乎没有这样的界面 - 所以我们不确定如何正确定义“用户”类。这个主题几乎没有文档。

同样,缺乏文档可能是由于软件未发布的特性。然而,仅查看the source code,似乎ApplicationUser可以从任何POCO对象派生 - 而无需实现IUser<TKey>接口。

就配置服务而言,请查看IdentityServiceCollectionExtensionsIdentityEntityFrameworkBuilderExtensions。似乎第一个在身份核心中作为提供注册应用程序身份服务的上下文的手段,而第二个是使用该上下文的实体框架特定实现。

实现使用ASP.NET Identity 3但不使用EF的东西的解决方案似乎只是为身份服务接口提供不同的实现,然后在应用程序配置期间连接这些依赖项。您可以使用基本EntityFramework实现作为如何DIY的指南。但是告诫者,身份3可能会在最终发布之前再次发生变化,因此您对身份3构建的任何内容现在都可能发生变化。