public virtual async Task <SignInStatus> PasswordSignIn(string userName, string password, bool isPersistent, bool shouldLockout)
        {
            var user = await _userManager.FindByNameAsync(userName).ConfigureAwait(false);

            if (user == null)
            {
                return(SignInStatus.Failure);
            }
            if (await _userManager.IsLockedOutAsync(user.Id).ConfigureAwait(false))
            {
                return(SignInStatus.LockedOut);
            }
            if (await _userManager.CheckPasswordAsync(user, password).ConfigureAwait(false))
            {
                return(await SignInOrTwoFactor(user, isPersistent).ConfigureAwait(false));
            }
            if (shouldLockout)
            {
                // If lockout is requested, increment access failed count which might lock out the user
                await _userManager.AccessFailedAsync(user.Id).ConfigureAwait(false);

                if (await _userManager.IsLockedOutAsync(user.Id).ConfigureAwait(false))
                {
                    return(SignInStatus.LockedOut);
                }
            }
            return(SignInStatus.Failure);
        }