You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何覆写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 05:42:31