c# - 如何依赖注入 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 添加为要注入依赖项的类?
解决方案
这似乎意味着 AddIdentityCore 没有添加 SignInManager。
确实如此。如果你查看Addidentity和AddIdentityCore的源代码,你会发现AddIdentityCore
注册UserManager
唯一没有SignInManager
要添加SignInManager
,AddIdentityCore
您可以尝试:
IdentityBuilder builder = services.AddIdentityCore<ApplicationUser>();
builder = new IdentityBuilder(builder.UserType, builder.Services);
builder.AddEntityFrameworkStores<ApplicationDbContext>();
builder.AddSignInManager<SignInManager<ApplicationUser>>();
推荐阅读
- azure - 如何从 utcnow() 中删除毫秒数导致 Azure 数据工厂
- python - “yield from”在递归函数中是如何工作的?
- typo3 - TYPO3:如何获取 ObjectStorage 类型的域属性字段
从 extbase 中的流体形式映射? - php - 使用 API 平台的原则扩展 - SQL
- java - Apache docx CreateWatermark 在文本中设置字体或 CTTextPath setstyle 删除双/单引号
- javascript - 如何使标记切换?
- c++ - STM32F - 立方体程序突然结束
- android - 导航崩溃:还原期间目的地未知
- python - 为什么我的装饰器运行而不调用它?
- sql - 选择某个值之前的行