如何在 ASP.NET Core 3.1 的另一个应用程序中包含用户管理器

     2023-02-25     273

关键词:

【中文标题】如何在 ASP.NET Core 3.1 的另一个应用程序中包含用户管理器【英文标题】:How to include a user manager to another application for ASP.NET Core 3.1 【发布时间】:2020-07-20 00:07:25 【问题描述】:

我正在开发两个不同的应用程序,我将它们命名为 A 和 B。

A 是一个互联网平台,只有拥有有效用户帐户才能登录。 B 是一个 Intranet 平台,用户可以在其中通过 Active Directory 进行身份验证。使用应用程序 B 的管理员应该能够为应用程序 A 创建新的用户帐户。

创建新用户帐户后,我希望能够实现不同的功能,例如向注册的邮件地址发送电子邮件,以便新用户可以更改默认密码。

我想要实现的所有功能都可以由 UserManager 完成(请参阅以下链接中的“使用其他应用程序添加用户”部分:https://docs.microsoft.com/en-us/aspnet/core/security/authentication/scaffold-identity?view=aspnetcore-3.1&tabs=visual-studio#disable-register-page)。

基于此我实现了以下代码:

public class ControllerClass : Controller

    private readonly HelperClass _helper;
    private readonly UserManager<IdentityUser> _userManager;

    public ControllerClass (UserManager<IdentityUser> userManager)
    
        _userManager = userManager;
        _helper= new HelperClass (userManager);
    


public class HelperClass 

    private readonly DbContext _db;
    private readonly UserManager<IdentityUser> _userManager;

    public HelperClass (UserManager<IdentityUser> userManager)
    
        _db = new DbContext ();
        _userManager = userManager;
    

    private async Task<string> EnsureUser(string userName, string userPassword)
    
        var user = await _userManager.FindByNameAsync(userName);

        if (user == null)
        
            user = new IdentityUser()
            
                UserName = userName                    
            ;
            await _userManager.CreateAsync(user, userPassword);
        

        return user.Id;
    


    internal async void CreateUser(UserVM uvm, int id)
    
        var userId = await EnsureUser(uvm.userName, uvm.userPassword);

        // TODO ...
    


很遗憾,我没有设法将 UserManager 包含到我的应用程序 B 中。我收到以下错误消息:“处理请求时发生未处理的异常。 InvalidOperationException:尝试激活“ControllerClass”时,无法解析“Microsoft.AspNetCore.Identity.UserManager`1[IdentityUser]”类型的服务。”

您知道如何添加 UserManager 来管理另一个应用程序的用户吗?

【问题讨论】:

【参考方案1】:

嗯,你得到的具体错误仅仅是因为UserManager&lt;TUser&gt; 没有在服务集合中注册。为了注入anything,你必须先注册它。在您实际面向用户的应用程序中,这是由services.AddIdentity() 完成的。然而,这不仅仅是注册UserManager&lt;TUser&gt;,所以你不应该只是跑掉并在你的第二个应用程序中添加相同的命令。

您可以专门为其添加注册:

services.AddScoped<UserManager<ApplicationUser>>();

然而,它实际上有大量的依赖,每一个都需要被注册。如果您查看constructor,则有七个 服务未注册开箱即用,其中许多都有自己的依赖关系树。久而久之,痛不欲生。这里还有关注点分离的问题。这需要从其他应用添加整个数据层。

最好的办法是简单地在 Identity 应用上公开一个 API(当然,将其锁定)。这样,与用户合作的所有逻辑都与该逻辑的其余部分保持一致。然后,管理应用程序可以调用 API 来添加、更新、删除等用户,而无需知道实际是如何完成的。

【讨论】:

非常感谢,这很有意义。在当前解决方案中,我通过实体框架手动添加(或编辑)用户帐户。现在,我正在考虑按照您的回答将所有内容移至 API。我希望解决问题会更容易。 我正在与 schmityv 一起工作:我们发现我们已经在 Appl B 的启动类中有 services.AddDefaultIdentity。因此,如果我们将构造函数从 UserManager 更改为标准 UserManager 并使“OurIdentityClass”继承自“IdentityUser”,注入按预期工作。然而,userManager 不工作(内部没有用户)并且查找用户的任务超时......对此有任何输入吗? 可能是连接字符串问题。没有点击正确的或任何数据库。

如何在asp .net core 3.1中设置请求超时

】如何在asp.netcore3.1中设置请求超时【英文标题】:howsettherequesttimeoutinasp.netcore3.1【发布时间】:2020-06-1006:04:15【问题描述】:从VisualStudio中选择创建一个新项目。选择ASP.NETCore3.1在IIS中发布和托管增加上传文件大小这段代码:pu... 查看详情

如何在 ASP.NET Core 3.1 中逐行迭代列表

】如何在ASP.NETCore3.1中逐行迭代列表【英文标题】:HowtoiteratealistrowbyrowinASP.NETCore3.1【发布时间】:2021-03-0208:48:25【问题描述】:我有一个list&lt;&gt;,我需要将列表的每一行传递给一个存储过程。我目前有一个foreach循环来... 查看详情

如何将 UserManager 注入 ASP.NET Core 2.0 中的另一个服务

】如何将UserManager注入ASP.NETCore2.0中的另一个服务【英文标题】:HowtoinjectUserManagertoanotherserviceinASP.NETCore2.0【发布时间】:2018-11-2002:43:30【问题描述】:我创建了一个使用用户管理员身份的服务publicclassUserManagerService:IUserManagerServi... 查看详情

如何使用 C# 在 ASP.NET Core 3.1 MVC 中使用会话变量

】如何使用C#在ASP.NETCore3.1MVC中使用会话变量【英文标题】:HowtousesessionvariablesinASP.NETCore3.1MVCusingC#【发布时间】:2021-09-2605:01:19【问题描述】:我在处理会话对象时遇到了问题。设置和进入同一个控制器可以正常工作,我的麻烦... 查看详情

ASP.NET Core 3.1 MVC 如何让用户在注册时选择自己的角色?

】ASP.NETCore3.1MVC如何让用户在注册时选择自己的角色?【英文标题】:ASP.NETCore3.1MVCHowtoallowtheusertoselecthisrolewhenregistering?【发布时间】:2020-07-0406:41:38【问题描述】:我正在创建一个ASP.NETCore3.1应用程序。我添加了“买家”和“卖... 查看详情

如何在我的 asp.net core 3.1 应用程序中播种用户和角色?

】如何在我的asp.netcore3.1应用程序中播种用户和角色?【英文标题】:HowcanIseedusersandrolesinmyasp.netcore3.1application?【发布时间】:2020-04-0109:17:30【问题描述】:我尝试在我的IdentityDataContext类中使用protectedoverridevoidOnModelCreating(ModelBui... 查看详情

如何在 ASP.NET Core 3.1 生产中配置 IdentityServer

】如何在ASP.NETCore3.1生产中配置IdentityServer【英文标题】:HowtoconfigureIdentityServerinASP.NETCore3.1production【发布时间】:2021-10-2711:31:05【问题描述】:我正在尝试运行ASP.NETCore3.1应用程序,该应用程序在开发中运行良好,但在生产环境... 查看详情

如何使用 Visual Studio 2019 在 Docker 容器中运行 ASP.NET Core 3.1 项目?

】如何使用VisualStudio2019在Docker容器中运行ASP.NETCore3.1项目?【英文标题】:HowtorunanASP.NETCore3.1projectinaDockercontainerwithVisualStudio2019?【发布时间】:2020-04-2114:35:36【问题描述】:我创建了一个基于ASP.NETCore3.1框架的WebAPI项目。后来,... 查看详情

如何在 ASP.NET Core 3.1 中启用多重身份验证?

】如何在ASP.NETCore3.1中启用多重身份验证?【英文标题】:HowtoenablemultipleauthenticationinASP.NETCore3.1?【发布时间】:2020-08-3101:32:49【问题描述】:在我的aspnetcore3.1项目中,我使用jwt进行身份验证。问题是我也在使用azure客户端来获... 查看详情

如何在 ASP.NET CORE 3.1 中获取客户端 IP 地址?

】如何在ASP.NETCORE3.1中获取客户端IP地址?【英文标题】:HowdoIgetclientIPaddressinASP.NETCORE3.1?【发布时间】:2020-04-2921:06:39【问题描述】:在WebAPI项目中编写代码时如何在ASP.NET3.1中获取客户端IP地址【问题讨论】:这能回答你的问题... 查看详情

ASP.NET Core 3.1 - 如何获取客户端的 IP 地址?

】ASP.NETCore3.1-如何获取客户端的IP地址?【英文标题】:ASP.NETCore3.1-HowdoIgetaclient\'sIPAddress?【发布时间】:2020-05-1609:44:32【问题描述】:我有一个Razor页面Web应用程序并正在记录用户的IP地址。出于某种原因,它返回的是IP地址,... 查看详情

如何在 asp.net core 3.1 中将 Json.NET 设置为默认序列化程序

】如何在asp.netcore3.1中将Json.NET设置为默认序列化程序【英文标题】:HowdoIsetJson.NETasdefaultserializerinasp.netcore3.1【发布时间】:2020-04-0102:37:44【问题描述】:将ASP.NET核心2.1Web应用程序转换为3.1并发现一些端点损坏,因为新的Json序... 查看详情

如何从数据库中读取加密值并将其与 ASP.NET Core 中的另一个值进行比较?

】如何从数据库中读取加密值并将其与ASP.NETCore中的另一个值进行比较?【英文标题】:HowtoreadanencryptedvaluefromdatabaseandcompareitwithanothervalueinASP.NETCore?【发布时间】:2021-10-2220:32:57【问题描述】:使用的工具:VisualStudio2019、ASP.NETC... 查看详情

登录 ASP.NET Core 3.1 后如何获取用户信息

】登录ASP.NETCore3.1后如何获取用户信息【英文标题】:HowtogetUserInformationafterlogininASP.NETCore3.1【发布时间】:2021-10-1908:46:54【问题描述】:我正在尝试在登录ASP.NETCore3.1后获取用户信息(姓名、电子邮件、ID等信息...)。这是我在... 查看详情

将 JWT 自动加载到 User.Identity (ASP.NET Core 3.1)

...名。可能需要注意的是,系统的身份验证和授权正在系统的另一部分处理(我只 查看详情

如何正确解析要在 ASP.NET Core 3.1 的 ConfigureServices() 中使用的服务?

】如何正确解析要在ASP.NETCore3.1的ConfigureServices()中使用的服务?【英文标题】:HowtocorrectlyresolveservicestouseintheConfigureServices()inASP.NETCore3.1?【发布时间】:2020-02-0522:24:35【问题描述】:我有一个基于ASP.NETCore3.1的应用程序。在应用... 查看详情

如何在 Asp.net Core 3.1 中使用 Ajax 刷新或重新加载 ViewComponent?

】如何在Asp.netCore3.1中使用Ajax刷新或重新加载ViewComponent?【英文标题】:HowtorefreshorreloadaViewComponentwithAjaxinAsp.netCore3.1?【发布时间】:2021-10-2702:12:33【问题描述】:我希望FavoriteComponent在单击“a”标签时刷新?HTML:<divid="favari... 查看详情

如何在 asp.net core 3.1 中为每种类型的请求启用 Cors

】如何在asp.netcore3.1中为每种类型的请求启用Cors【英文标题】:HowtoenableCorsforeverytypeofrequestinasp.netcore3.1【发布时间】:2020-06-2310:31:08【问题描述】:?我正在关注MSDocs,但它们似乎不起作用。注意:我能够为特定域实现cors,但... 查看详情