【问题标题】:Move identity to a class library ASP.Net Core将标识移动到类库 ASP.Net Core
【发布时间】:2017-05-28 09:45:09
【问题描述】:

我开发了一个基于 ASP.Net 核心的新项目。 为了遵循 SOLID 规则的单一职责原则,我已将所有 EF 代码(模型、映射、DbContext)移动到专用的 DAL 类库中。

但是,我现在需要将身份验证添加到我的项目中,并且需要将以下内容添加到我的 Web 项目的 Startup.cs 中,如不同教程中所示:

services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

这将涉及添加 Microsoft.AspNetCore.Identity.EntityFrameworkCore 包,在我看来,我开始通过将此包包含到我的 Web 项目中来打破 SRP 规则。

是否可以像我为 DAL 所做的那样将所有身份代码(服务、模型)作为外部类库移动。

【问题讨论】:

  • 是的,你可以。将其移至外部库中的扩展方法并在组合根目录(即 Web 项目)中调用它。
  • 以下,因为我正在尝试做同样的事情,但还没有弄清楚。

标签: asp.net-core entity-framework-core asp.net-core-identity


【解决方案1】:

由于身份代码既有逻辑又有 UI(登录/注销、注册等),它需要是一个网络应用程序。

IMO 有两种选择:

  1. 将身份标识为单独的 Web 应用程序。由于 Asp.Net Core Identity 支持 OAuth2(OAuth2 支持交互授权,例如代码授权),因此用户将在登录/注册过程中被重定向到此 Web 应用端点。
  2. 将身份控制器与您的控制器结合起来,并将身份数据移动到您的 DAL 库中,请参阅:https://www.codeproject.com/Articles/1156558/ASP-NET-Core-Moving-IdentityDbContext-and-EF-model

如果 SRP 对您很重要,第一个选项会是更好的选择。如果重定向到不同的 URL 对您来说似乎是一种糟糕的用户体验,那么第二个选项可能会更好。

【讨论】:

    【解决方案2】:

    我对完全相同的问题进行了自己的研究,发现这个线程您可以阅读有关实现 here 的信息,尽管它与 .NET Core 类库没有特别的关系。 我相信校长是相似的,你可以找到自己的方式。 我还假设它不必通过此处提到的 Web 应用程序应用程序来实现。

    【讨论】:

    • 请不要发布主要包含对外部网站的引用的答案。这些网站可能会消失,您的回复的内容也会随之消失。综合外部资源必须提供的原始海报。
    【解决方案3】:

    是的,您可以将 Microsoft.AspNetCore.Identity.EntityFrameworkCore 安装到类库中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-16
      • 2017-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多