Смена Пароля В Laravel 5.4



Я добавил код для смены пароля в своем веб-приложении. Но Hash::check() не работает. Всегда возвращайте false. Также Hash::Make() возвращает разную строку каждый раз. Я попробовал bcrypt() вместо этого, но это также не работает. Пожалуйста, помогите мне. Вот мой код.



public function changePassword(Request $request)
{
$user = Auth::user();

$curPassword = $request->input['curPassword'];
$newPassword = $request->input['newPassword'];

if (Hash::check($curPassword, $user->password)) {
$user_id = $user->id;
$obj_user = User::find($user_id)->first();
$obj_user->password = Hash::make($newPassword);
$obj_user->save();

return response()->json(["result"=>true]);
}
else
{
return response()->json(["result"=>false]);
}
}


Спасибо.

711   4  

4 ответов:

Я думаю, что ваша переменная $curPassword пуста, поэтому она всегда возвращает false. Попробуйте этот способ

$curPassword = $request->curPassword;
$newPassword = $request->newPassword;

Если только вы не отправляете данные в массиве input. Но кто-то, Hash::check() терпит неудачу, что означает, что нет соответствия.

Что касается одной и той же строки, то да, Hash::make() всегда возвращает другую строку. Наверное, в целях безопасности.

Вот как я это сделал:

В моем контроллере я использую следующий метод:

public function changePassword()
{
    $this->validate(request(), [
        'current_password' => 'required|current_password',
        'new_password' => 'required|string|min:6|confirmed',
    ]);

    request()->user()->fill([
        'password' => Hash::make(request()->input('new_password'))
    ])->save();
    request()->session()->flash('success', 'Password changed!');

    return redirect()->route('password.change');
}

Это подтвердит ввод, а затем правильно сохранит новый пароль для текущего пользователя. Он также мигает сообщением, а затем возвращает их в форму смены пароля. Вы можете удалить эту часть и делать там свои собственные вещи.

Здесь используется созданное мной пользовательское правило проверки под названием current_password. Вы должны добавить это в свой метод AppServiceProvider::boot() следующим образом:

public function boot()
{
    // current password validation rule
    Validator::extend('current_password', function ($attribute, $value, $parameters, $validator) {
        return Hash::check($value, Auth::user()->password);
    });
}

Просто убедитесь, что вы используете тот самый Auth, Hash, и Validator фасады в AppServiceProvider.

Наконец, нам просто нужно объявить наше сообщение об ошибке в нашем файле lang/en/validation.php:

'current_password' => "The :attribute is invalid.",

Надеюсь, это поможет.

Это должно быть

 $curPassword =$request->input('curPassword');
 $newPassword = $request->input('newPassword');

Не

 $curPassword = $request->input['curPassword'];
 $newPassword = $request->input['newPassword'];

В документации Laravel они говорят, что если вы хотите изменить пароль, что вы можете сделать после проверки

 $request->user()->fill([
            'password' => Hash::make($request->newPassword)
        ])->save();

В этой строке также есть ошибка

$obj_user = User::find($user_id)->first();

Это должно быть

$obj_user = User::find($user_id);

Как говорится в официальной документации

// Retrieve a model by its primary key...
$flight = App\Flight::find(1);

// Retrieve the first model matching the query constraints...
$flight = App\Flight::where('active', 1)->first();

Comments

    Ничего не найдено.