Hirdetés

Új hozzászólás Aktív témák

  • joysefke

    veterán

    .NET Core 2.1, ASP.NET Core 2.1 IPasswordValidator

    Amikor kreálok egy usert, akkor a beállított password policy szépen alapján a kért jelszó erőssége szépen validálásra kerül,

    azonban amikor meg akarom változtatni a beállított jelszót és a kért új jelszó erősségének validálásához a beépített default IPasswordValidatorból (amit bár nem konfiguráltam DI-re, mégis valahogy működik a [FromServices] ) kérek egy példányt és azzal próbálok validálni, akkor a validálás nem működik, bármilyen jelszó elfogadásra kerül.

    Startup.cs

    services.AddIdentity<AppUser, IdentityRole>(
    opts => {
    opts.User.RequireUniqueEmail = true;
    opts.Password.RequiredLength = 3;
    opts.Password.RequireNonAlphanumeric = false;
    opts.Password.RequireLowercase = false;
    opts.Password.RequireUppercase = false;
    opts.Password.RequireDigit = false;
    })

    Kontroller
    Usert így kreálom:
    AppUser newUser = new AppUser { UserName = model.Name, Email = model.Email };
    IdentityResult result = await userManager.CreateAsync(newUser, model.Password);

    if (result.Succeeded)
    {
    // safe to assume that the below operation will succeede
    await userManager.AddToRoleAsync(newUser, "Admins");
    return RedirectToAction(nameof(AdminUsers));
    }

    És így szeretném megváltoztatni a passwordot:

    Fügvény deklaráció, DI. Érdekes, hogy a Startup-ban én semmit nem rendeltem az IPasswordValidator-hoz

    public async Task<IActionResult> Edit2(
    [FromServices]IPasswordValidator<AppUser> passwordValidator,
    [FromServices]IPasswordHasher<AppUser> passwordHasher,
    EditModel model, string newPwd)

    .....

    Itt szeretném a jelszó erősségét validálni és ha megfelel megjelölöm, hogy updatelni akarom

    IdentityResult passwordResult = await passwordValidator.ValidateAsync(userManager, userToEdit, model.Password);

    if (!passwordResult.Succeeded)
    foreach (var error in passwordResult.Errors)
    ModelState.AddModelError("", error.Description);
    else
    passwordNeedsChange = true;

    Itt hajtom végre az IdentityUser updétjét:

    if (ModelState.IsValid)
    {
    if (emailNeedsChange)
    userToEdit.Email = model.Email;
    if (passwordNeedsChange)
    userToEdit.PasswordHash = passwordHasher.HashPassword(userToEdit, model.NewPassword);

    var updateResult = await userManager.UpdateAsync(userToEdit);
    ....
    }

    Előre is köszi!

    #8679 Köszi!

Új hozzászólás Aktív témák