arxeiss / passwordrule
Laravel 框架的密码规则
Requires
- php: ^7.0 || ^8.0
- illuminate/contracts: ^5.5 || ^6.0 || ^7.0 || ^8.0 || ^9.0
- illuminate/support: ^5.5 || ^6.0 || ^7.0 || ^8.0 || ^9.0
README
弃用:由于在 Laravel 8.39 版本中已将密码验证添加到核心,因此该工具已被弃用。有关更多信息,请参阅 Laravel News 和 Laravel 文档
Laravel 5.5+ 的密码规则
此包包含用于使用 Laravel 验证器验证密码字段的 PasswordRule
类。如今,包含数字、大小写字母(以及符号)的密码已不再足够。但仍然比简单的最小长度规则要好。
使用 Illuminate\Contracts\Validation\Rule
接口创建的自定义规则是在 Laravel 5.5 中引入的。但您也可以简单地复制逻辑并在早期的 Laravel 版本中使用。
重要提示 - 不要错过 添加到预定义的 Laravel Auth 控制器 部分,因为必须在原始控制器中更改规则。
目录
安装
建议使用 composer 进行安装
composer require arxeiss/passwordrule
不需要更多步骤,因为 Laravel 5.5+ 提供了 自动包发现。
配置
默认情况下,包包含 英语 和 捷克语 翻译,默认配置如下。不要更改 vendor
文件夹中的配置文件或翻译。运行以下命令
php artisan vendor:publish --provider="PasswordRule\PasswordRuleServiceProvider"
以发布配置文件 config/passwordrule.php
和翻译文件到 resources/lang/vendor/passwordrule/
。
PasswordRule 可以做什么
PasswordRule 可以用于 Laravel,使用四个可选规则验证密码输入。
- 最小长度 - 必要规则,用于测试密码的最小长度
- 驼峰式 - 可选规则。测试密码是否包含大小写字母
- 数字 - 可选规则,用于测试密码是否包含数字
- 特殊字符 - 可选规则,用于测试密码是否包含列表中的至少一个特殊字符
所有设置都可以通过全局配置文件以及每个实例的构造函数设置。
消息格式
PasswordRule 总是返回一条消息,该消息根据设置构建。始终使用基本短语。根据上述设置添加更多或更少的短语。在语言文件中指定两个连接短语。使用 join_comma
连接所有短语(最后一个短语除外)。在最后一个短语之前插入 join_and
。
结果消息可能如下所示
- 密码必须至少包含 6 个字符
- 密码必须至少包含 8 个字符
和
数字 - 密码必须至少包含 6 个字符
,
大小写字母和
数字 - 密码必须包含至少7个字符,包括大小写字母、数字以及至少1个特殊符号(@#%)。
使用方法
基本使用
表单请求验证:
/** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'password' => ['required', new PasswordRule\PasswordRule, 'confirmed'], ]; }
请求验证:
public function store(Request $request) { $request->validate([ 'password' => ['required', new PasswordRule\PasswordRule, 'confirmed'], ]); }
覆盖全局设置
PasswordRule构造函数接受4个参数,可以覆盖全局设置new PasswordRule($minLength, $camelCase, $numbers, $specialChars)
。传递null
以从全局配置中加载特定设置。
return [ // Password must be at least 8 characters long and must contains "_" 'password' => ['required', new PasswordRule\PasswordRule(8, false, false, "_"), 'confirmed'], ];
添加到预定义的Laravel Auth控制器
Laravel在其入门包laravel/laravel中提供了基本的Auth控制器。现在重要的是RegisterController和ResetPasswordController,因为在这两个控制器中都有原始的密码规则。
在RegisterController中规则直接写入,易于更改。但在ResetPasswordController中,必须覆盖方法rules()
,如下面的代码所示。
/** * Get the password reset validation rules. * * @return array */ protected function rules() { $rules = parent::rules(); $rules['password'] = ["required", new PasswordRule, "confirmed"]; return $rules; }
变更日志
[1.0] - 14.8.2018
- 首次公开发布