用于重置密码的Laravels正则表达式在重置密码时被忽略

时间:2019-08-03 14:32:20

标签: laravel

我正在使用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);
    }

非常感谢

1 个答案:

答案 0 :(得分:0)

Laravel 5.8将密码最小值更改为8个字符。如果要使用6,则需要通过扩展PasswordBroker类来覆盖默认行为。

https://laravel.com/docs/5.8/upgrade#new-default-password-length

  

新的默认密码长度
  影响的可能性:高

     

选择或重置密码时所需的密码长度已更改为八个字符。您应该更新应用程序中的所有验证规则或逻辑,以匹配此新的八个字符的默认值。

     

如果您需要保留前六个字符的长度或其他长度,则可以扩展Illuminate\Auth\Passwords\PasswordBroker类并使用自定义逻辑覆盖validatePasswordWithDefaults方法。