如何覆写Laravel Jetstream的最小密码长度校验规则?
Laravel Jetstream 覆写密码最小长度校验正确方法
之前的操作不生效核心是三个问题:
- 直接修改
vendor目录下的文件本身就不可行,只要执行依赖安装、更新或者重装操作,vendor下的所有改动都会被覆盖,你重装Jetstream之后之前改的Fortify密码规则已经被还原成默认值了 - 项目里存在硬编码的
min:8校验规则,优先级高于你修改的Password类规则 - Jetstream的Livewire栈默认给密码输入框加了原生
minlength="8"前端校验,后端规则改了但前端没改的话,浏览器会直接拦截提交,根本不会走到后端校验,所以改再多后端代码也没用
正确操作按下面步骤来:
1. 全局配置密码规则(官方推荐,无侵入方案)
打开app/Providers/AppServiceProvider.php,先在文件头部引入Password类,然后在boot方法里配置全局默认密码长度:
// 文件头部引入类 use Laravel\Fortify\Rules\Password; public function boot() { // 保留文件里原有的其他代码,新增下面这段配置即可 Password::defaults(function () { return (new Password)->length(3); }); }
这个配置全局生效,所有用到Fortify默认Password规则的校验逻辑,都会自动应用3位的最小长度要求。
2. 清理所有硬编码的后端校验规则
执行Jetstream重装命令后,认证相关的Livewire组件都会被覆盖回默认配置,需要逐一检查以下文件,把里面硬编码的min:8规则删掉,替换为全局配置的Password规则:
app/Http/Livewire/Auth/Register.php:注册功能的校验规则,检查$rules数组中的password字段配置app/Http/Livewire/Profile/UpdatePasswordForm.php:个人中心修改密码的校验规则- 如果项目中自定义了重置密码、后台新增用户这类涉及密码设置的逻辑,也要同步检查对应位置的校验规则
修改后的注册规则参考示例:
protected function rules() { return [ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 'password' => ['required', 'string', Password::default(), 'confirmed'], 'terms' => Jetstream::hasTermsAndPrivacyPolicyFeature() ? ['accepted', 'required'] : '', ]; }
3. 修改前端原生校验属性
打开以下两个视图文件,找到密码对应的<input>标签,把标签上写死的minlength="8"属性改成minlength="3":
resources/views/auth/register.blade.php注册页面的密码输入框resources/views/profile/update-password-form.blade.php个人中心修改密码的输入框
如果项目还有其他密码输入场景(比如重置密码页面),也同步检查对应视图的input属性配置。
注意:任何情况下都不要直接修改
vendor目录下的文件,所有自定义逻辑都应该写在app目录、配置文件或者服务提供者中,避免后续更新依赖、重装扩展包时自定义代码被覆盖。
内容的提问来源于stack exchange,提问作者Laila Campos
相关产品推荐
相关产品推荐

