innovareti/password-policy

此包的最新版本(v1.4.4)没有提供许可信息。

一个库,用于直观创建密码策略并验证主题是否符合这些策略。

v1.4.4 2022-12-02 18:20 UTC

This package is not auto-updated.

Last update: 2024-09-21 02:40:54 UTC


README

要安装,首先运行以下命令

composer require innovareti/password-policy

步骤 2

在项目内部,在文件 config/app.php 中,将以下提供者在提供者数组中添加

    'providers' => [
        /*
         * Laravel Framework Service Providers...
         */
        PasswordPolicy\Providers\Laravel\PasswordPolicyServiceProvider::class,
    
        ...

然后运行以下命令

php artisan passwordpolicy:install

此命令将在项目中创建密码策略表并强制更改具有密码 "password" 的用户的密码,首先将密码更改为随机密码并向用户发送重置密码的电子邮件。

步骤 3

接下来,在文件 app/Providers/AppServiceProvider.php 中,在 boot 函数内添加以下代码

use PasswordPolicy;
use App\Models\User;
use PasswordPolicy\Observers\UserObserver;
use PasswordPolicy\PolicyBuilder; 
    public function boot()
    {
        PasswordPolicy::define('default', function (PolicyBuilder $builder) {
            $builder->defaultRules();
        });    
        User::observe(UserObserver::class);
    }

步骤 4

现在要使用包中现有的密码验证,请前往所需的请求类(例如:UserRequest)并添加密码规则 "password" 到密码规则中

    public function rules()
    {
        $rules = [];
        $rules = [
             'name' => 'required',
             'email' => 'required|email|unique:users,email,' . request()->id,
             'cpf' => 'required|unique:users,cpf,' . request()->id,
             'password' => 'password' <--
        ];
        return $rules;
    }

此外,在 Request 的 messages 函数中,您可以添加包的自动返回消息

use PasswordPolicy\Policy;
    public function messages()
    {
        return [
            'required' => ':attribute é obrigatório',
            'unique' => ':attribute informado já está sendo utilizado',
            'email' => 'O e-mail deve ser válido',
            'password' => Policy::validationMessage() //<--
        ];
    }

如果用户输入错误密码,此消息将返回包中定义的规则。

步骤 5

在使用用户每 x 天强制更改密码的功能时,需要在项目的登录处添加以下代码

use PasswordPolicy\Policy;
    /**
     * Method to authenticate User
     */
    public function auth(AuthRequest $request)
    {
    ...
    
    if(Policy::isPasswordExpired($user->id))
         return response()->json('Sua senha expirou! Um e-mail foi enviado no endereço '. $request->only(['email'])['email']. ' para redefinição da senha.', 401);  
    ...

并在 .ENV 中添加以下变量

PASSWORD_POLICY_ACTIVE=true
PASSWORD_POLICY_DAYS=90

PASSWORD_POLICY_ACTIVE 变量设置为 "true" 将会强制用户每 x 天更改密码。这些天由 PASSWORD_POLICY_DAYS 变量定义。

注意事项

1 - 如果上述变量不在 .ENV 中,则包将使用默认的 90 天,并且不会激活强制密码更改。

2 - "IsPasswordExpired" 函数将检查根据提供的用户 ID,该用户的密码是否已过期。它将分析用户上次更新密码的日期。此日期包含在安装命令创建的表中(user_password_policies)并通过包中的 Observer(UserObserver)更新。