Как сменить пароль в laravel laravel 5.2 - PullRequest
0 голосов
/ 04 октября 2018

У меня есть три поля

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;
}

Я застрял в этой проблеме, мне нужна ваша помощь.Любая помощь будет высоко оценена!

1 Ответ

0 голосов
/ 04 октября 2018

Какие ошибки дает вам валидатор?Вы можете получить их с помощью $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, который намного более безопасен для хеширования конфиденциальных данных.

...