Показывать пользователю сообщение при неправильном вводе пароля ASP.NET Core 3.0 MVC - PullRequest
0 голосов
/ 13 октября 2019

, что происходит, когда пользователь вводит пароль неправильно, появляется следующее сообщение:

Недопустимая попытка входа в систему.

Но это сообщение также появляется, когда пользователь не подтвердил свою электронную почту. Как я могу показать пользователю сообщение для каждой ситуации?

if (ModelState.IsValid)
{
    // This doesn't count login failures towards account lockout
    // To enable password failures to trigger account lockout, set lockoutOnFailure: true
    var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: true);
    if (result.Succeeded)
    {
        _logger.LogInformation("User logged in.");
        return LocalRedirect(returnUrl);
    }

    if (result.RequiresTwoFactor)
    {
        return RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = Input.RememberMe });
    }

    if (result.IsLockedOut)
    {
        _logger.LogWarning("User account locked out.");
        return RedirectToPage("./Lockout");
    }
    else
    {
        ModelState.AddModelError(string.Empty, "Invalid login attempt.");
        return Page();
    }
}

1 Ответ

0 голосов
/ 14 октября 2019

Для PasswordSignInAsync , он проверяет имя пользователя и пароль с помощью UserManager

    public virtual async Task<SignInResult> PasswordSignInAsync(string userName, string password,
        bool isPersistent, bool lockoutOnFailure)
    {
        var user = await UserManager.FindByNameAsync(userName);
        if (user == null)
        {
            return SignInResult.Failed;
        }

        return await PasswordSignInAsync(user, password, isPersistent, lockoutOnFailure);
    }

. Вы можете добавить эту логику, чтобы определить, является ли имя пользователя или пароль недействительными.

    public async Task<IActionResult> OnPostAsync(string returnUrl = null)
    {
        returnUrl = returnUrl ?? Url.Content("~/");

        if (ModelState.IsValid)
        {
            // This doesn't count login failures towards account lockout
            // To enable password failures to trigger account lockout, set lockoutOnFailure: true
            var result = await _signInManager.PasswordSignInAsync(LoginInput.Email, LoginInput.Password, LoginInput.RememberMe, lockoutOnFailure: true);
            if (result.Succeeded)
            {
                _logger.LogInformation("User logged in.");
                return LocalRedirect(returnUrl);
            }
            if (result.RequiresTwoFactor)
            {
                return RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = LoginInput.RememberMe });
            }
            if (result.IsLockedOut)
            {
                _logger.LogWarning("User account locked out.");
                return RedirectToPage("./Lockout");
            }
            else
            {
                var user = await _userManager.FindByNameAsync(LoginInput.Email);
                if (user == null)
                {
                    ModelState.AddModelError(string.Empty, "Invalid UserName.");
                }
                else if (!await _userManager.CheckPasswordAsync(user, LoginInput.Password))
                {
                    ModelState.AddModelError(string.Empty, "Invalid Password.");
                }
                return Page();
            }
        }

        // If we got this far, something failed, redisplay form
        return Page();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...