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

Laravel重置密码:如何移除默认的6位密码长度验证限制

解决Laravel密码重置默认密码长度验证的重写问题

嘿,这个场景我太熟悉了——直接改vendor目录里的框架代码确实能临时解决问题,但完全不适合生产环境,Laravel本身就提供了优雅的扩展方式来搞定这个,不用碰核心文件。下面是具体步骤:

第一步:创建自定义的PasswordBroker类

我们需要继承框架默认的PasswordBroker,然后重写那个validatePasswordWithDefaults方法。在你的项目里新建一个文件app/Auth/Passwords/CustomPasswordBroker.php,内容如下:

<?php

namespace App\Auth\Passwords;

use Illuminate\Auth\Passwords\PasswordBroker as BasePasswordBroker;

class CustomPasswordBroker extends BasePasswordBroker
{
    /**
     * 重写默认的密码验证逻辑
     *
     * @param  array  $credentials
     * @return bool
     */
    protected function validatePasswordWithDefaults(array $credentials)
    {
        [$password, $confirm] = [
            $credentials['password'],
            $credentials['password_confirmation'],
        ];

        // 这里改成你需要的规则,比如密码长度≥1位
        return $password === $confirm && mb_strlen($password) >= 1;
    }
}

第二步:在服务容器中替换默认的PasswordBroker实现

接下来要告诉Laravel,当需要PasswordBroker类的时候,使用我们自定义的版本。打开app/Providers/AppServiceProvider.php,在register方法里添加绑定逻辑:

<?php

namespace App\Providers;

use App\Auth\Passwords\CustomPasswordBroker;
use Illuminate\Auth\Passwords\PasswordBroker;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * 注册应用服务
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind(PasswordBroker::class, function ($app) {
            // 获取框架默认的令牌生成器和用户提供者
            $tokens = $app->make('auth.password.tokens');
            $users = $app->make('auth')->createUserProvider();
            
            // 返回我们自定义的Broker实例
            return new CustomPasswordBroker($tokens, $users);
        });
    }
}

第三步:确保自定义验证规则一致

别忘了同步你自己的验证规则——也就是User::resetPasswordRules()里的密码规则,要和重写后的逻辑匹配,比如把密码规则改成:

public static function resetPasswordRules()
{
    return [
        'email' => 'required|email',
        'password' => 'required|string|min:1|confirmed',
        // 其他规则...
    ];
}

为什么这么做?

这种方式利用了Laravel的服务容器依赖注入特性,我们没有修改任何框架核心代码,而是通过替换绑定的方式实现了自定义逻辑。这样你的代码可以正常提交到Git,同步到生产环境,完全不用担心vendor目录被忽略的问题。

如果是Laravel 8及以上版本,这个逻辑依然适用,核心思路就是继承默认类并替换容器绑定。

内容的提问来源于stack exchange,提问作者Javed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:49:36