public override async Task AuthenticateLocalAsync(LocalAuthenticationContext ctx) { var username = ctx.UserName; var password = ctx.Password; var message = ctx.SignInMessage; ctx.AuthenticateResult = null; if (userManager.SupportsUserPassword) { var user = await FindUserAsync(username); if (user != null) { if (!await userManager.IsEmailConfirmedAsync(user.Id)) { return; } if (userManager.SupportsUserLockout && await userManager.IsLockedOutAsync(user.Id)) { return; } if (await userManager.CheckPasswordAsync(user, password)) { if (userManager.SupportsUserLockout) { await userManager.ResetAccessFailedCountAsync(user.Id); } var result = await PostAuthenticateLocalAsync(user, message); if (result == null) { var claims = await GetClaimsForAuthenticateResult(user); result = new AuthenticateResult(user.Id.ToString(), await GetDisplayNameForAccountAsync(user.Id), claims); } ctx.AuthenticateResult = result; } else if (userManager.SupportsUserLockout) { await userManager.AccessFailedAsync(user.Id); } } } }