Halnex Halnex - 6 months ago 193
PHP Question

How to validate current, new, and new password confirmation in Laravel 5?

I have created the password route, view and method in

UserController@getProfilePassword
and
UserController@postProfilePassword


At the moment, if I fill out the
new_password
field, it gets hashed and submitted to the database correctly, then I can login with the new password.

But I need to be able to validate the
new_password
and
new_password_confirm
to make sure they're the same and validate the user's current password as well.

How can I do that?

EDIT: I added
$this->validate
to the method, but now I keep getting the error
The password confirmation confirmation does not match.
even though they do match as I am using a simple password. Also I think I need to check against the current password manually as
validator
won't do it for me.

public function getProfilePassword() {
return view('profile/password', ['user' => Auth::user()]);
}

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

$this->validate($request, [
'old_password' => 'required',
'password' => 'required|min:4',
'password_confirmation' => 'required|confirmed'
]);

$user->password = Hash::make(Input::get('new_password'));
$user->save();
}


And this is the view

<form action="{{ route('profile/updatepassword') }}" method="post" enctype="multipart/form-data">
<div class="form-group">
<label for="name">Current Password</label>
<input type="password" name="old_password" class="form-control" id="old_password">
</div>
<div class="form-group">
<label for="name">Password</label>
<input type="password" name="password" class="form-control" id="password">
</div>
<div class="form-group">
<label for="name">New Password</label>
<input type="password" name="password_confirmation" class="form-control" id="password_confirmation">
</div>
<button type="submit" class="btn btn-primary">Change Password</button>
<input type="hidden" value="{{ Session::token() }}" name="_token">
</form>

Sid Sid
Answer

There's a Hash::check() function which allows you to check whether the old password entered by user is correct or not.

usage

if (Hash::check("param1", "param2")) {
 //add logic here
}

param1 - user password that has been entered on the form
param2 - old password hash stored in database

it will return true if old password has been entered correctly and you can add your logic accordingly

for new_password and new_confirm_password to be same, you can add your validation in form request like

'new_password' => 'required',
'new_confirm_password' => 'required|same:new_password'
Comments