我正在使用laravel重置密码。
这是我的验证人
protected function validator(array $data)
{
return Validator::make($data, [
'email' => ['required', 'string', 'email', 'max:255'],
'password' => ['required', 'string', 'min:6', 'regex:/^(?=.*\d)(?=(.*\W){2})(?=.*[a-zA-Z])(?!.*\s).{1,15}$/'], //, 'regex:/^[a-zA-Z0-9!$#%]+$/'
]);
}
我希望至少有2个数字,2个特殊字符和至少6个字符(那不是我的选择:D)
但是,当使用laravel的reset.blade.php模板并单击电子邮件中的链接后,它会忽略此验证,并且至少需要8个字符的验证... 有想法吗?
我尝试将其添加到ResetPasswordConfirmation中,但没有成功(“您的密码必须至少为8个字符”,并且正则表达式将被忽略)
public function reset(Request $request)
{
$request->validate([
'token' => 'required',
'email' => ['required', 'string', 'email', 'max:255'],
'password' => ['required', 'string', 'min:6', 'regex:/^(?=.*\d)(?=(.*\W){2})(?=.*[a-zA-Z])(?!.*\s).{1,15}$/'],
], $this->validationErrorMessages());
$this->broker()->validator(function ($credentials) {
return mb_strlen($credentials['password']) >= 6;
});
$response = $this->broker()->reset(
$this->credentials($request),
function ($user, $password) {
$this->resetPassword($user, $password);
}
);
return $response == Password::PASSWORD_RESET
? $this->sendResetResponse($request, $response)
: $this->sendResetFailedResponse($request, $response);
}
非常感谢
答案 0 :(得分:0)
Laravel 5.8将密码最小值更改为8个字符。如果要使用6,则需要通过扩展PasswordBroker
类来覆盖默认行为。
https://laravel.com/docs/5.8/upgrade#new-default-password-length
新的默认密码长度
影响的可能性:高选择或重置密码时所需的密码长度已更改为八个字符。您应该更新应用程序中的所有验证规则或逻辑,以匹配此新的八个字符的默认值。
如果您需要保留前六个字符的长度或其他长度,则可以扩展
Illuminate\Auth\Passwords\PasswordBroker
类并使用自定义逻辑覆盖validatePasswordWithDefaults
方法。