Laravel 如何解决错误';密码必须至少包含八个字符,并与确认信息相匹配;在拉威尔5.8

Laravel 如何解决错误';密码必须至少包含八个字符,并与确认信息相匹配;在拉威尔5.8,laravel,email,reset-password,Laravel,Email,Reset Password,当我键入电子邮件和密码并单击“重置密码”时,如果密码少于3个字符,则显示密码必须至少为3个字符的错误,但如果我键入密码超过3个字符,则显示电子邮件输入错误,即密码必须至少为8个字符并与确认相符,密码已确认并与确认相匹配 resetPasswordController.php中的rules方法: protected function rules() { return [ 'token' => 'required', 'email' => 'req

当我键入电子邮件和密码并单击“重置密码”时,如果密码少于3个字符,则显示密码必须至少为3个字符的错误,但如果我键入密码超过3个字符,则显示电子邮件输入错误,即密码必须至少为8个字符并与确认相符,密码已确认并与确认相匹配

resetPasswordController.php中的rules方法:

protected function rules()
{
    return [
        'token' => 'required',
        'email' => 'required|email',
        'password' => 'required|confirmed|min:3',
    ];
}

如何解决此问题,在不显示密码的情况下成功重置密码必须至少为8个字符并与确认匹配?

您可以覆盖验证程序的方法,如下所示

/**
 * Get a validator for an incoming registration request.
 *
 * @param  array  $data
 * @return \Illuminate\Contracts\Validation\Validator
 */
protected function validator(array $data)
{
    return Validator::make($data, [
        'password' => ['required', 'string', 'min:3', 'confirmed'],
    ]);
}

转到
project\u文件夹\smt\vendor\laravel\framework\src\illumb\Foundation\Auth\ResetsPasswords.php

根据需要更改
rules()
方法

    /**
     * Get the password reset validation rules.
     *
     * @return array
     */
    protected function rules()
    {
        return [
            'token' => 'required',
            'email' => 'required|email',
            'password' => 'required|confirmed|min:6',
        ];
    }

谢谢大家解决方案是:

您要找的是本课程:

\照亮\Auth\Passwords\PasswordBroker 这个函数呢

ValidatePasswordWithDefault 这个函数中硬编码了8,这看起来有点奇怪。我想可能有更好的实践来改变这一点。也许你可以超越你控制器的功能。也可以尝试一下。

只需在
construct()
之后的Auth\ResetPasswordsController.php中添加
rules()
方法:

这是截图


而且,请记住,永远不要编辑供应商/文件。

它是在laravel 5.8中硬编码的。要修复它,您需要覆盖一些类

1.)在App\Providers中创建CustomPasswordResetServiceProvider

您需要创建一个新的
CustomPasswordResetServiceProvider
类,我们将使用该类替换默认的
PasswordResetServiceProvider

<?php

namespace App\Providers;

use App\Services\CustomPasswordBrokerManager;
use Illuminate\Support\ServiceProvider;

class CustomPasswordResetServiceProvider extends ServiceProvider
{
    protected $defer = true;

    public function register()
    {
        $this->registerPasswordBrokerManager();
    }

    public function provides()
    {
        return ['auth.password'];
    }

    protected function registerPasswordBrokerManager()
    {
        $this->app->singleton('auth.password', function ($app) {
            return new CustomPasswordBrokerManager($app);
        });
    }
}
3.)创建新的CustomPasswordBrokerManager类

在App/Services目录下创建一个新类CustomPasswordBrokerManager,并复制位于
light\Auth\Passwords\PasswordBrokerManager.php的PasswordBrokerManager的所有内容

然后修改函数resolve以返回我的CustomPasswordProvider类的实例

    protected function resolve($name)
    {
        $config = $this->getConfig($name);

        if (is_null($config)) {
            throw new InvalidArgumentException("Password resetter [{$name}] is not defined.");
        }

        return new CustomPasswordBroker(
            $this->createTokenRepository($config),
            $this->app['auth']->createUserProvider($config['provider'] ?? null)
        );
    }
4。创建CustomPasswordBroker

最后,您现在可以在App/Services目录下创建新的CustomPasswordBroker类,该目录扩展了位于
illumb\Auth\Passwords\PasswordBroker

<?php

namespace App\Services;

use Illuminate\Auth\Passwords\PasswordBroker as BasePasswordBroker;

class CustomPasswordBroker extends BasePasswordBroker
{
    /**
     * Determine if the passwords are valid for the request.
     *
     * @param array $credentials
     *
     * @return bool
     */
    protected function validatePasswordWithDefaults(array $credentials)
    {
        $minPassLength = 6;

        [$password, $confirm] = [
            $credentials['password'],
            $credentials['password_confirmation'],
        ];

        return $password === $confirm && mb_strlen($password) >= $minPassLength;
    }
}

我发现在这里解决这个问题既简单又简单


您可以找到制作它的原因。

首先转到PasswordBroker.php

vendor\laravel\framework\src\Illuminate\Auth\Passwords\PasswordBroker.php
vendor\laravel\framework\src\Illuminate\Foundation\Auth\ResetsPasswords.php
到176号线,在这里换车

return $password === $confirm && mb_strlen($password) >= **any digit you want**;
'password' => 'required|confirmed|min:**degit you chose in **PasswordBroker.php****',
然后转到ResetsPasswords.php

vendor\laravel\framework\src\Illuminate\Auth\Passwords\PasswordBroker.php
vendor\laravel\framework\src\Illuminate\Foundation\Auth\ResetsPasswords.php
到69号线,在这里换车

return $password === $confirm && mb_strlen($password) >= **any digit you want**;
'password' => 'required|confirmed|min:**degit you chose in **PasswordBroker.php****',

谢谢。。。它在laravel 5.8上起作用了吗?你是否检查过你是否达到了你想要的相同功能?是的,在/vendor中,规则功能定义了验证,如果我将min改为min:4,它就起作用了这就是我所做的,我说,当我键入一个小于6的密码时,它的长度最多会超过6或6,但如果我输入7,它会说“密码必须至少有8个字符,并且与确认信息相匹配”,你不应该编辑供应商的内容。Composer会生气的。太好了,这是我找到的最好的解决方案。人们都投反对票,因为Laravel规则1:不要更改/vendor目录中的任何内容。当您运行composer安装或更新时,此文件会更新。对于那些寻求修复硬编码密码验证的书面答案的人,此解决方案是最好的,需要最少的努力和干净的方法。