Как повторно использовать проверку идентификационного пароля при смене пароля - PullRequest
0 голосов
/ 14 февраля 2019

Я занимаюсь разработкой проекта asp.net core 2.1 с использованием Identity (UserManager, RoleManager), настройки пароля которого:

services.Configure<IdentityOptions>(options =>
    {
        options.Lockout.AllowedForNewUsers = false;
        options.Lockout.MaxFailedAccessAttempts = 3;
        options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
        options.Password.RequireDigit = true;
        options.Password.RequireLowercase = true;
        options.Password.RequireNonAlphanumeric = false;
        options.Password.RequireUppercase = true;
        options.Password.RequiredLength = 6;
        options.Password.RequiredUniqueChars = 1;
        options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    });

Я разрабатываю собственную функцию смены пароля, но я бы хотелзнать, есть ли способ воспользоваться преимуществами предыдущих настроек пароля (перед упомянутыми параметрами запуска) для проверки нового пароля (например, путем добавления службы), избегая создания нового средства проверки пароля или, возможно, UserManager предоставляет способ проверки?

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Я нашел решение, просто используя метод ChangePasswordAsync в UserManager, он проверяет политики проверки паролей:

var result = await _userManager.ChangePasswordAsync(usuario, model.ContraseñaActual, model.ContraseñaNueva);

После этого, проверяя логическое свойство result.Succeeded и result.Errors, я могу проверитьсообщения об ошибках в соответствии с политикой проверки.

Также спасибо Тао Чжоу за альтернативную помощь

0 голосов
/ 14 февраля 2019

Для IPasswordValidator, оно зарегистрировано

services.TryAddScoped<IPasswordValidator<TUser>, PasswordValidator<TUser>>();

Для доступа к PasswordValidator<TUser>, вы можете попробовать

public class HomeController : Controller
{
    private readonly UserManager<IdentityUser> _userManager;
    private readonly IPasswordValidator<IdentityUser> _passwordValidator;
    public HomeController(UserManager<IdentityUser> userManager
        , IPasswordValidator<IdentityUser> passwordValidator)
    {
        _userManager = userManager;
        _passwordValidator = passwordValidator;
    }

А затем подтвердить пароль с помощью

public IActionResult Index()
{
    var result = _passwordValidator.ValidateAsync(_userManager, null, "123");

    return View();
}

Для PasswordValidator , он не проверял пользователя, поэтому вы можете передать значение null.

Проверьте результат проверки в var result.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...