c# - 如何在.net Core 2.0中扩展SignInManager

标签 c# asp.net-mvc asp.net-core asp.net-identity asp.net-core-2.0

我已在 User 类 (IsEnabled) 中设置了一个新属性,并希望登录管理器检查此属性,因此我按如下方式重写 PasswordSignInAsync:

public class AuthSignInManager<TUser> : SignInManager<User> where TUser : class
{
    private readonly UserManager<User> _userManager;
    private readonly AuthContext _db;
    private readonly IHttpContextAccessor _contextAccessor;

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

    public override Task<SignInResult> PasswordSignInAsync(string userName, string password, bool rememberMe, bool shouldLockout)
    {
        var user = UserManager.FindByEmailAsync(userName).Result;

        if ((user.IsEnabled.HasValue && !user.IsEnabled.Value) || !user.IsEnabled.HasValue)
        {
            return Task.FromResult(SignInResult.LockedOut);
        }

        return base.PasswordSignInAsync(userName, password, rememberMe, shouldLockout);
    }
}

我已将以下内容放入启动中:

        services.AddIdentity<User, IdentityRole>(config =>
            {
                config.SignIn.RequireConfirmedEmail = true;
            })
            .AddEntityFrameworkStores<AuthContext>()
            .AddDefaultTokenProviders()
            .AddUserManager<AuthSignInManager<User>>();

        services.AddScoped<SignInManager<User>, AuthSignInManager<User>>();

但是当我现在运行我的项目时,出现以下错误: enter image description here 我做错了什么?

最佳答案

正如 Brad 指出的那样,启动不应调用 AddUserManager

相反:

    .AddSignInManager<AuthSignInManager<User>>();

这行后面的行也可以完全删除,因为它实现了等效功能:

    services.AddScoped<SignInManager<User>, AuthSignInManager<User>>();

关于c# - 如何在.net Core 2.0中扩展SignInManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51201586/

相关文章:

c# - 服务突然抛出 SocketException,没有明显变化

asp.net-mvc - Ninject.MVC3、Nuget、WebActivator 天哪

c# - 如何阻止 ASP.NET Core 发布本地化的 Microsoft.CodeAnalysis.*.resources.dll 文件?

c# - 在名为 test113.onmicrosoft.com 的租户中找不到名为 HTTPS ://test113. onmicrosoft.com/FTP 的应用程序

c# - ArrayList 与 List<object>

c# - 如何自动检测我的 NuGet 包是否是最新的?

c# - 是否可以在 Synology nas 上安装 SQL Server?

c# - 基于域和主机名的 ASP.NET MVC 路由

asp.net-core - flutter websocket连接问题

asp.net-mvc - 将 javascript 文件存储在与 ASP.NET Core 1.1 中的 View 相同的文件夹中?