首页 > 解决方案 > 如何依赖注入 SignInManager?

问题描述

我有一个 WebAPI 应用程序,我正在使用第 3 方身份验证器(Firebase 身份验证)。

我的身份验证工作,但一旦用户登录到我的服务器,我想将凭据和用户数据保存到我的 ASP.NET 身份表中。

如果我在 Startup.cs 文件中调用此行,我似乎可以使用 UserManager 创建帐户

services.AddIdentityCore<ApplicationUser>()
                   .AddEntityFrameworkStores<ApplicationDbContext>();

这允许我在构造函数中添加 UserManager 而无需添加所有登录页面和默认 cookie 身份验证方案,如果我调用 AddIdentity()

但是,当我像这样在构造函数中添加 SignInManager 时

public ValuesController(SignInManager<ApplicationUser> signInManager)

我似乎仍然收到此错误。

执行请求时发生未处理的异常。System.InvalidOperationException:尝试激活“testWebAPIFB.Controllers.ValuesController”时,无法解析“Microsoft.AspNetCore.Identity.SignInManager`1[mvcWithAuth.Data.ApplicationUser]”类型的服务。

这似乎意味着 AddIdentityCore 没有添加 SignInManager。如何将 SignInManager 添加为要注入依赖项的类?

标签: c#.netasp.net-coreasp.net-identityasp.net-core-2.2

解决方案


这似乎意味着 AddIdentityCore 没有添加 SignInManager。

确实如此。如果你查看AddidentityAddIdentityCore的源代码,你会发现AddIdentityCore注册UserManager唯一没有SignInManager

要添加SignInManagerAddIdentityCore您可以尝试:

IdentityBuilder builder = services.AddIdentityCore<ApplicationUser>();

builder = new IdentityBuilder(builder.UserType, builder.Services);

builder.AddEntityFrameworkStores<ApplicationDbContext>();

builder.AddSignInManager<SignInManager<ApplicationUser>>();

请参阅.Net Core 2.0 Web API using JWT - 添加身份会破坏 JWT 身份验证


推荐阅读