PasswordStrength

Дата оновлення перекладу 2025-01-15

PasswordStrength

Валідує, що заданий пароль досяг мінімальної надійності, яка вимагається обмеженням. Надійність пароля не оцінюється за допомогою набору заздалегідь визначених правил (включення числа, використання малих та великих літер тощо), а шляхом вимірювання ентропії пароля на основі його довжини та кількості використаних унікальних символів.

?????????????? ?? ??????????? ??? ??????
???? PasswordStrength
????????? PasswordStrengthValidator

Базове застосування

Наступне обмеження гарантує, що властивість rawPassword класу User досягне мінімальної надійності, що вимагається обмеженням. За замовчуванням мінімально необхідна оцінка дорівнює 2.

1
2
3
4
5
6
7
8
9
10
// src/Entity/User.php
namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class User
{
    #[Assert\PasswordStrength]
    protected $rawPassword;
}

Доступні опції

minScore

тип: integer за замовчуванням: PasswordStrength::STRENGTH_MEDIUM (2)

Мінімальна потрібна надійність пароля. Доступні константи:

  • PasswordStrength::STRENGTH_WEAK = 1
  • PasswordStrength::STRENGTH_MEDIUM = 2
  • PasswordStrength::STRENGTH_STRONG = 3
  • PasswordStrength::STRENGTH_VERY_STRONG = 4

PasswordStrength::STRENGTH_VERY_WEAK доступно, але використовується лише внутрішньо або ж користувацьким оцінювачем надійності пароля.

1
2
3
4
5
6
7
8
9
10
11
12
// src/Entity/User.php
namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class User
{
    #[Assert\PasswordStrength([
        'minScore' => PasswordStrength::STRENGTH_VERY_STRONG, // Very strong password required
    ])]
    protected $rawPassword;
}

message

тип: string за замовчуванням: Надійність пароля занизька. Будь ласка, використайте надійніший пароль.

Повідомлення за замовчуванням, як відображається, якщо пароль не досягає мінімальної необхідної оцінки.

1
2
3
4
5
6
7
8
9
10
11
12
// src/Entity/User.php
namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class User
{
    #[Assert\PasswordStrength([
        'message' => 'Le mot de passe est trop faible. Veuillez utiliser un mot de passe plus fort.'
    ])]
    protected $rawPassword;
}

Налаштування оцінки надійності пароля

7.2

Можливість налаштовувати оцінку надійності пароля була представлена в Symfony 7.2.

За замовчуванням, це обмеження обчислює надійність пароля на основі його довжини та кількості використаних унікальних символів. Ви можете отримати розраховану надійність пароля (наприклад, для відображення в інтерфейсі користувача) за допомогою наступної статичної функції:

1
2
3
use Symfony\Component\Validator\Constraints\PasswordStrengthValidator;

$passwordEstimatedStrength = PasswordStrengthValidator::estimateStrength($password);

Якщо вам потрібно перевизначити алгоритм оцінки надійності пароля за замовчуванням, ви можете можете передати Closure конструктору PasswordStrengthValidator (наприклад, за допомогою замикань сервіса).

По-перше, створіть користувацький алгоритм оцінки надійності пароля у спеціальному викличному класі:

1
2
3
4
5
6
7
8
9
10
11
12
namespace App\Validator;

class CustomPasswordStrengthEstimator
{
    /**
     * @return PasswordStrength::STRENGTH_*
     */
    public function __invoke(string $password): int
    {
        // Ваш користувацький алгоритм оцінки надійності пароля
    }
}

Потім сконфігуруйте сервіс PasswordStrengthValidator, щоб використовувати ваш власний оцінювач:

1
2
3
4
5
6
7
# config/services.yaml
services:
    custom_password_strength_estimator:
        class: App\Validator\CustomPasswordStrengthEstimator

    Symfony\Component\Validator\Constraints\PasswordStrengthValidator:
        arguments: [!closure '@custom_password_strength_estimator']