我在控制器中有此功能,我无法重置密码,因为我想将字符长度更改为5位数。
public function postReset(Request $request)
{
$this->validate($request, [
'token' => 'required',
'password' => 'required|confirmed|digits:5',
]);
$credentials = $request->only(
'email', 'password', 'password_confirmation', 'token'
);
$response = Password::reset($credentials, function ($user, $password) {
$this->resetPassword($user, $password);
});
dd($response);
switch ($response) {
case Password::PASSWORD_RESET:
return redirect($this->redirectPath());
default:
return redirect()->back()
->withInput($request->only('email'))
->withErrors(['email' => trans($response)]);
}
}
protected function resetPassword($user, $password)
{
$user->password = bcrypt($password);
$user->save();
Auth::login($user);
}
但它总是说:
糟糕!您的输入存在一些问题。
密码必须至少为六个字符并与确认符一致。
当我补充道:
dd($response);
打印:
passwords.password
知道如何解决这个问题吗?
答案 0 :(得分:2)
你在寻找的是这堂课:
\Illuminate\Auth\Passwords\PasswordBroker
和这个功能
validatePasswordWithDefaults
在此函数中6
被硬编码看起来有点奇怪。
我想改变它可能有更好的做法。
也许你可以在你的控制器中覆盖这个功能。试试这个。
答案 1 :(得分:2)
这是因为Illuminate\Auth\Passwords\PasswordBroker
中存在硬编码验证。
调用reset
方法时,它会始终先调用validateReset
,然后调用validateNewPassword
:
public function validateNewPassword(array $credentials)
{
list($password, $confirm) = [
$credentials['password'],
$credentials['password_confirmation'],
];
if (isset($this->passwordValidator)) {
return call_user_func(
$this->passwordValidator, $credentials) && $password === $confirm;
}
return $this->validatePasswordWithDefaults($credentials);
}
默认情况下,未设置passwordValidator
。因此validatePasswordWithDefaults
将要求密码长度至少为6个字符。
您可以使用Password::validator
设置passwordValidator
,它接受一个必须返回一个布尔值的闭包,指示给定的凭据是否有效。这需要在Password::reset
之前完成。
例如,更改验证程序以要求密码长度恰好为5个字符,尤其可以满足您的要求。
Password::validator(function($credentials)
{
return strlen($credentials['password']) === 5;
});
答案 2 :(得分:1)
更改此行:
'password' => 'required|confirmed|digits:5'
到
'password' => 'required|confirmed|min:5'
答案 3 :(得分:0)
首先转到 PasswordBroker.php
vendor\laravel\framework\src\Illuminate\Contracts\Auth\PasswordBroker.php
转到第35行并在此处更改
const INVALID_PASSWORD = '**any thing you want**';
首先转到 PasswordBroker.php
vendor\laravel\framework\src\Illuminate\Auth\Passwords\PasswordBroker.php
转到第176行并在此处更改
return $password === $confirm && mb_strlen($password) >= **any digit you want**;
然后转到 ResetsPasswords.php
vendor\laravel\framework\src\Illuminate\Foundation\Auth\ResetsPasswords.php
转到第69行并在此处更改
'password' => 'required|confirmed|min:**degit you chose in **PasswordBroker.php****',
谢谢...有效