fadonougbo/password-policy

v1.0.0 2024-03-28 12:02 UTC

This package is auto-updated.

Last update: 2024-09-27 19:11:03 UTC


README

PasswordPolicy 是一个库,允许定义各种密码验证规则。

安装

composer require fadonougbo/password-policy

用法

创建 PasswordPolicy 的新实例

use PasswordPolicy\PasswordPolicy;

$policy=new PasswordPolicy('paswword');

现在添加规则

use PasswordPolicy\PasswordPolicy;

$status=(new PasswordPolicy('password'))
        ->withLowercase() //  [a-z]
        ->withUppercase()  //  [A-Z]
        ->withNumber()   //  [0-9]
        ->withSymbol()  // [\W_] 
        ->getStatus();  

 var_dump($status);  
        
   true

方法 withLowercasewithUppercasewithSymbolwithNumber 可以接受最小值或最大值作为参数,代表接受的重复次数。

use PasswordPolicy\PasswordPolicy;

$password=$_POST['password'];

$status=(new PasswordPolicy($password))
        ->withLowercase(2) //  minimum 2 lowercase letters
        ->withUppercase(2,3)  //  2 to 3 uppercase letters
        ->withNumber(max:1)   //  0 or 1 number
        ->withSymbol(1,1)  // 1 symbol
        ->getStatus();  

   if($status) {
      echo 'Very good';
   }else {
      echo 'error';
   }

您可以使用 getData 方法获取更多信息。

use PasswordPolicy\PasswordPolicy;


$data=(new PasswordPolicy('%USERmsjah22'))
        ->withLowercase() //  0 or more lowercase letters
        ->withUppercase(4)   //  minimum 4 uppsercase letters
        ->withSymbol(max:3)  // 0 to 3 symbol
        ->getData();  

 echo $data->password;
 echo $data->status;
 echo $data->length;
   %USERmsjah22
   true
   12

注意:如果您想要密码中完全不含数字,您必须在 withNumber 方法中指定。对于小写字母、大写字母和符号也是如此。

use PasswordPolicy\PasswordPolicy;

$password=$_POST['password'];

$status=(new PasswordPolicy($password))
        ->withLowercase(0,0) // 0 lowercase letter
        ->withUppercase(0,0)  //  0 uppercase letter
        ->withNumber()   //  0 or more numbers
        ->getStatus();  

方法 blockSameCharacters 如果密码包含一定数量的重复字符,则会使其无效。

例如:aaaaaa ,bbbbb ,password11111

use PasswordPolicy\PasswordPolicy;


$data=(new PasswordPolicy('user222222'))
               ->blockSameCharacter(4) //Does not accept passwords with a repeated character 4 or more times.
               ->getData();  

   echo $data->status;
   false

如果您想阻止使用先前密码的用户,可以使用 blockIf 方法

use PasswordPolicy\PasswordPolicy;

$oldPasswordHash='$2y$10$i8FPWdu/4B.GV4Cl8Hq80.9p/TjrGncCrhkQYjradFpy6o/CAJnsG';

$status=(new PasswordPolicy('newpassword'))
            ->blockIf(function($password) use($oldPasswordHash) {

                return !password_verify($password,$oldPasswordHash);

            })
            ->getStatus();

    if($status) {
        echo 'Yes, it is ok';
    }else {
        echo 'You cannot use an old password.';
    }

您可以使用 blockCommonPasswords 阻止世界上一些最常见的密码,如 azerty 或 12345。

use PasswordPolicy\PasswordPolicy;

$response=(new PasswordPolicy('iloveyou'))
               ->blockCommonPasswords("This password is too weak") 
               ->getData();  

    if($response->status) {
        echo 'Yes, it is ok';
    }else {
        echo $response->messages['blockCommonPasswords'];
    }
This password is too weak

注意:如果您需要定义一个不受欢迎的密码列表,可以使用 blockListContent

使用 setLength 定义密码的大小

use PasswordPolicy\PasswordPolicy;

$response=(new PasswordPolicy('JohnD0e2oo2'))
               ->setLength(6) // min 6 characters
               ->getData();