yebor974 / filament-renew-password
根据上一次更新或其他标准管理更新密码的包
Requires
- php: ^8.1
- filament/filament: ^3.0
- illuminate/contracts: ^10.0|^11.0
- illuminate/support: ^10.0|^11.0
- illuminate/validation: ^10.0|^11.0
- spatie/laravel-package-tools: ^1.16
README
Filament Renew Password 插件通过根据指定标准提示用户更新密码来增强 Filament。
实现了两种默认更新过程
- 定期更新
- 强制更新
您可以根据自己的需求添加更新标准。
安装
- 使用 composer 命令安装包
composer require yebor974/filament-renew-password
- 发布并运行迁移,该迁移将新列
last_renew_password_at
和force_renew_password
添加到用户表。
php artisan vendor:publish --tag="filament-renew-password-migrations"
php artisan migrate
或者,如果您不想发布迁移或已经数据库中存在此类列,可以跳过此步骤,并使用下面的配置部分中描述的任何配置方法来自定义列名。
- 可选地,您可以使用以下命令发布翻译文件
php artisan vendor:publish --tag="filament-renew-password-translations"
- 在您的面板提供商中注册插件
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);