yebor974/filament-renew-password

根据上一次更新或其他标准管理更新密码的包

2.0.4 2024-09-06 10:19 UTC

This package is auto-updated.

Last update: 2024-09-23 07:17:10 UTC


README

Filament Renew Password 插件通过根据指定标准提示用户更新密码来增强 Filament。

实现了两种默认更新过程

  • 定期更新
  • 强制更新

您可以根据自己的需求添加更新标准。

Screenshot

安装

  1. 使用 composer 命令安装包
composer require yebor974/filament-renew-password
  1. 发布并运行迁移,该迁移将新列 last_renew_password_atforce_renew_password 添加到用户表。
php artisan vendor:publish --tag="filament-renew-password-migrations"
php artisan migrate

或者,如果您不想发布迁移或已经数据库中存在此类列,可以跳过此步骤,并使用下面的配置部分中描述的任何配置方法来自定义列名。

  1. 可选地,您可以使用以下命令发布翻译文件
php artisan vendor:publish --tag="filament-renew-password-translations"
  1. 在您的面板提供商中注册插件
use Yebor974\Filament\RenewPassword\RenewPasswordPlugin;

public function panel(Panel $panel): Panel
{
    return $panel
       ->plugin(new RenewPasswordPlugin());
}

配置

Filament Renew Password 插件设计为开箱即用,配置简单。但是,您可以通过发布配置文件、更改环境变量或使用插件对象来覆盖默认设置来自定义插件。

更新过程

提供了两种配置,可以同时使用。

  • 定期更新过程

默认情况下,定期更新过程是禁用的。

要激活定期更新过程,您必须调用 passwordExpiresIn 并定义更新的天数

RenewPasswordPlugin::make()
    ->passwordExpiresIn(days: 30)

此激活将自动管理名为 last_renew_password_at 的最后更新时间戳列。您可以使用 timestampColumn 函数来自定义它

RenewPasswordPlugin::make()
    ->passwordExpiresIn(days: 30)
    ->timestampColumn('your_custom_timestamp_column')
  • 强制更新过程

强制更新过程可以在管理员创建用户时非常有用。您可以向新用户发送临时密码,并强制他们在第一次登录时更新密码。

默认情况下,强制更新过程是禁用的。

要激活它,您必须调用 forceRenewPassword 函数

RenewPasswordPlugin::make()
    ->forceRenewPassword()

此激活将自动管理名为 force_renew_password 的强制更新布尔列。如果您想自定义它,可以在第二个参数中定义

RenewPasswordPlugin::make()
    ->forceRenewPassword(forceRenewColumn: 'your_custom_boolean_force_column')

如果您不想定期更新,只想使用强制更新过程以及时间戳列,您可以使用以下方式添加

RenewPasswordPlugin::make()
    ->forceRenewPassword()
    ->timestampColumn('your_custom_timestamp_column')

当然,您可以使用此配置同时使用这两种过程

RenewPasswordPlugin::make()
    ->passwordExpiresIn(days: 30)
    ->forceRenewPassword()

以及列的自定义

RenewPasswordPlugin::make()
    ->passwordExpiresIn(days: 30)
    ->forceRenewPassword(forceRenewColumn: 'your_custom_boolean_force_column')
    ->timestampColumn('your_custom_timestamp_column')

自定义更新页面

默认情况下,使用 RenewPassword 简单页面提示用户更新密码。您可以使用以下方式自定义它

RenewPasswordPlugin::make()
    ->renewPage(CustomRenewPassword::class)

使用方法

在您的认证模型(用户)上实现 RenewPasswordContract,并在 needRenewPassword 函数中定义提示密码更新的标准。

  • 默认特征

您可以在您的认证模型(用户)上使用 RenewPassword 特征。

class User extends Authenticatable implements RenewPasswordContract
{
    use RenewPassword;
}

此特征管理激活的定期更新和/或强制更新

public function needRenewPassword(): bool
{
    $plugin = RenewPasswordPlugin::get();

    return
        (
            !is_null($plugin->getPasswordExpiresIn())
            && Carbon::parse($this->{$plugin->getTimestampColumn()})->addDays($plugin->getPasswordExpiresIn()) < now()
        ) || (
            $plugin->getForceRenewPassword()
            && $this->{$plugin->getForceRenewColumn()}
        );
}
  • 自定义标准

您可以通过在您的认证模型(用户)上实现 needRenewPassword 函数来自定义自己的标准。在这种情况下,您肯定需要自定义上述的 RenewPassword 简单页面。

从 V1 迁移到 V2

版本2不再自动启用密码更新过程。您必须根据上述文档定义要使用的过程。此外,不再有任何相关的配置文件或.env变量。

要将系统迁移到版本2并启用定期更新过程,您需要在插件初始化期间调用passwordExpiresIn函数,并传入以天为单位的更新周期。

RenewPasswordPlugin::make()
    ->passwordExpiresIn(days: 30)

如果您想添加强制更新过程,您需要在认证模型(用户)中添加强制布尔列,并按照上述配置部分中所示声明。

$table->boolean('force_renew_password')->default(false);