如何在没有 Entity Framework 的情况下使用 ASP.NET Identity 3.0

How to use ASP.NET Identity 3.0 without Entity Framework

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

有没有不使用 Entity Framework 并且 ApplicationUser class 不是从 Microsoft.AspNet.Identity.EntityFramework.IdentityUser 派生的例子?

在ASP.NET身份2.x中需要实现IUser接口。现在好像没有这样的接口了——所以我们不确定如何正确定义User class。几乎没有关于这个主题的文档。

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

Are there any example which does not use EntityFramework and where ApplicationUser class is not derived from Microsoft.AspNet.Identity.EntityFramework.IdentityUser?

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

In ASP.NET Identity 2.x it was needed to implement IUser interface. It seems there is not such interface now - so we're not sure how to define "User" class correctly.There is almost no documentation on this subject.

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

至于配置服务,请查看 IdentityServiceCollectionExtensions and IdentityEntityFrameworkBuilderExtensions。似乎第一个在身份核心中作为提供上下文的一种方式,在该上下文中为应用程序身份注册服务,而第二个是使用该上下文的 entityframework-特定实现。

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

我已经在我的项目中实现了,你要实现的主要是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>>());

一些相同的界面将在这里注册,但如果它们先注册,它将使用您的界面

services.AddIdentity<SiteUser, SiteRole>();