How to extend correctly SignInManager?

707 views Asked by At

I am trying to extend my SignInManager to override PasswordSignInAsync.

When trying to user it I'm getting the error:

InvalidOperationException: Unable to resolve service for type 'A.Extensions.ApplicationSignInManager' while attempting to activate 'A.Controllers.AccountController'.

This is my extension:

public class ApplicationSignInManager : SignInManager<ApplicationUser>
{
    public ApplicationSignInManager(ApplicationUserManager userManager,
        IHttpContextAccessor authenticationManager,
        IUserClaimsPrincipalFactory<ApplicationUser> claimsFactory,
        IOptions<IdentityOptions> optionsAccessor,
        ILogger<SignInManager<ApplicationUser>> logger) :
        base(userManager, authenticationManager, claimsFactory, optionsAccessor, logger)
    { }

    public override Task<SignInResult> PasswordSignInAsync(string userName, string password, bool rememberMe, bool shouldLockout)
    {
        ...

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

To the ConfiguredServices in Startup I added:

services.AddIdentity<ApplicationUser, IdentityRole>()
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddUserManager<ApplicationUserManager>()
    //.AddSignInManager<ApplicationSignInManager> // this causes an error: 'IdentityBuilder' does not contain a definition for 'AddSignInManager'
    .AddDefaultTokenProviders();

services.AddScoped<SignInManager<ApplicationUser>, ApplicationSignInManager>();

and am injecting it into my AccountController:

public AccountController(
    UserManager<ApplicationUser> userManager,
    ApplicationSignInManager applicationSignInManager
    )
{
    _userManager = userManager;
    _applicationSignInManager = applicationSignInManager;
}

What did I miss or how to include my custom SignInManager in the startup?

0

There are 0 answers