gpt4 book ai didi

c# - 在 Asp.Net Core 3 Identity 中创建自定义 SignInManager

转载 作者:行者123 更新时间:2023-11-30 12:38:09 29 4
gpt4 key购买 nike

我想为我的 SignInManager 创建一个自定义类,所以我创建了一个继承自 SignInManager<> 的类如下:

public class ApplicationSignInManager : SignInManager<ApplicationUser>
{
private readonly UserManager<ApplicationUser> _userManager;
private readonly ApplicationDbContext _dbContext;
private readonly IHttpContextAccessor _contextAccessor;

public ApplicationSignInManager(
UserManager<ApplicationUser> userManager,
IHttpContextAccessor contextAccessor,
IUserClaimsPrincipalFactory<ApplicationUser> claimsFactory,
IOptions<IdentityOptions> optionsAccessor,
ILogger<SignInManager<ApplicationUser>> logger,
ApplicationDbContext dbContext,
IAuthenticationSchemeProvider schemeProvider
)
: base(userManager, contextAccessor, claimsFactory, optionsAccessor, logger, schemeProvider)
{
_userManager = userManager ?? throw new ArgumentNullException(nameof(userManager));
_contextAccessor = contextAccessor ?? throw new ArgumentNullException(nameof(contextAccessor));
_dbContext = dbContext ?? throw new ArgumentNullException(nameof(dbContext));
}
}

然后我将它添加到 Startup.cs 的服务配置中:

services.AddDefaultIdentity<ApplicationUser>(configure =>
{
configure.User.AllowedUserNameCharacters += " ";
}).AddSignInManager<ApplicationSignInManager>()
.AddDefaultUI(UIFramework.Bootstrap4)
.AddEntityFrameworkStores<ApplicationDbContext>();

问题是默认的SignInManager<ApplicationUser>无法转换为 ApplicationSignInManager ,因此在访问管理器被注入(inject)其 Controller 的页面时出现此错误:

InvalidCastException: Unable to cast object of type 'Microsoft.AspNetCore.Identity.SignInManager`1[Socialize.Data.ApplicationUser]' to type 'Socialize.Utilities.Identity.ApplicationSignInManager'.

最佳答案

您的问题是由您注册 AddSignInManager<ApplicationSignInManager>() 引起的之前.AddDefaultUI(UIFramework.Bootstrap4) .

对于 AddDefaultUI , 它会调用 builder.AddSignInManager();这将注册 typeof(SignInManager<>).MakeGenericType(builder.UserType)并将覆盖您之前的设置。

尝试下面的代码:

        services.AddDefaultIdentity<ApplicationUser>()                
.AddDefaultUI(UIFramework.Bootstrap4)
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddSignInManager<ApplicationSignInManager>();

关于c# - 在 Asp.Net Core 3 Identity 中创建自定义 SignInManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55230614/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com