Laravel 如何解决错误';密码必须至少包含八个字符,并与确认信息相匹配;在拉威尔5.8
当我键入电子邮件和密码并单击“重置密码”时,如果密码少于3个字符,则显示密码必须至少为3个字符的错误,但如果我键入密码超过3个字符,则显示电子邮件输入错误,即密码必须至少为8个字符并与确认相符,密码已确认并与确认相匹配 resetPasswordController.php中的rules方法: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
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安装或更新时,此文件会更新。对于那些寻求修复硬编码密码验证的书面答案的人,此解决方案是最好的,需要最少的努力和干净的方法。