У меня три поля
1- пароль
2- новый пароль
3- подтверждение пароля — это смена пароля.
Я разрешил условие для пароля, которое должно быть 8 символов, один верхний, один нижний и один специальный символ
но я не могу сменить свой пароль, мой валидатор не работает:
Код моего контроллера:
public function changepassword(Request $request){
$user = Auth::guard()->user();
$request_data = $request->All();
$validator = $this->admin_credential_rules($request_data);
if($validator->fails()) {
return \Illuminate\Support\Facades\Redirect::to('mujucet')
->with("modal_message_danger", "password must be at least 8 characters, one upper and lower case, and a number");
} else {
$current_password = $user->password;
if(md5($request_data['password']) == $current_password) {
$user_id = $user->id;
$obj_user = User::find($user_id);
$obj_user->password = md5($request_data['new_password']);
$obj_user->save();
return \Illuminate\Support\Facades\Redirect::to('mujucet')
->with("modal_message_success", "Password has been changed successfully");
} else {
return \Illuminate\Support\Facades\Redirect::to('mujucet')
->with("modal_message_danger", "wong old password");
}
}
}
public function admin_credential_rules(array $data){
$messages = [
'new_password.required' => "Zdejte nové heslo.",
'password.required' => "Zadejte souÄasné heslo.",
];
$validator = Validator::make($data, [
'password' => 'required|min:8|regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\X])(?=.*[!$#%]).*$/|confirmed',
'new_password' => 'required|min:8|regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\X])(?=.*[!$#%]).*$/|confirmed',
], $messages);
return $validator;
}
Я застрял в этой проблеме, мне нужна твоя помощь.
Любая помощь будет высоко оценена!
Какие ошибки дает вам валидатор? Вы можете получить их с $validator->errors()
,
Глядя на код, я думаю, вам нужно удалить confirmed
правило из валидатора поля пароля (так как вам не нужно подтверждать старый пароль). Затем вам нужно изменить поле подтверждения нового пароля, чтобы иметь имя new_password_confirmation
,
Ваши три поля должны быть: password
, new_password
а также new_password_confirmation
,
Валидатор должен быть:
$validator = Validator::make($data, [
'password' => 'required|min:8|regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\X])(?=.*[!$#%]).*$/',
'new_password' => 'required|min:8|regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\X])(?=.*[!$#%]).*$/|confirmed',
], $messages);
Вы переопределили хеш-код по умолчанию для использования MD5 для паролей? По умолчанию Laravel использует bcrypt, который намного более безопасен для хеширования конфиденциальных данных.
Других решений пока нет …