So überprüfen Sie die aktuelle, neue, und neues Passwort Bestätigung in Laravel 5?
Ich habe das Kennwort route, Ansicht und Methode in UserController@getProfilePassword
und UserController@postProfilePassword
In dem moment, wenn ich füllen Sie das new_password
Feld, es wird ein Hashwert und übermittelt, korrekt in der Datenbank, dann kann ich mit dem neuen Passwort einloggen.
Aber ich muss in der Lage sein zu überprüfen, die new_password
und new_password_confirm
um sicherzustellen, dass Sie identisch sind und überprüfen Sie den Benutzer das aktuelle Kennwort als gut.
Wie kann ich das tun?
EDIT: ich Hinzugefügt $this->validate
zu der Methode, aber jetzt bekomme ich immer den Fehler The password confirmation confirmation does not match.
auch wenn Sie nicht übereinstimmen, wie ich bin, mit einem einfachen Passwort. Auch ich denke, dass ich brauchen, um zu überprüfen, die gegen das aktuelle Kennwort manuell als validator
wird es nicht tun für mich.
public function getProfilePassword(Request $request) {
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();
}
- Und dies ist die Ansicht
<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>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es eine
Hash::check()
- Funktion, die Ihnen erlaubt zu prüfen, ob das alte Passwort vom Benutzer eingegeben korrekt ist oder nicht.usage
wird true zurückgegeben, wenn alte Passwort korrekt eingegeben wurden, und Sie können fügen Sie Ihre Logik entsprechend
für
new_password
undnew_confirm_password
gleich sind, können Sie Ihre Validierung in form Anfrage wieconfirmation
stattsame:new_password
- gerade geändert und es hat funktioniert. Und ich werde mit derHash::check()
überprüfen Sie das aktuelle Kennwort ein.confirmed
Gültigkeitsregel <link>. Ihre eigentliche Regel wäre nur eine Zeile wie diese:'new_password' => 'required|confirmed'
. Und in der Bestätigungs-Feld name solltenew_password_confirmation
.https://laravel.com/docs/5.6/validation#using-closures
Können Sie dies tun, indem Sie eine benutzerdefinierte Gültigkeitsregel (für dieses Beispiel verwende ich
current_password
undnew_password
wie die Eingabe von Namen).Setzen Sie diese in
AppServiceProvider::boot()
:Nun können Sie die folgenden in Ihrem controller:
'required_with:new_password|current_password:'.$user->id
(Doppelpunkt statt Komma), mit Laravel 5.6Können Sie hinzufügen
confirmed
als es zu bestätigen alte Passwort ein.Und
'required|confirmed'
Sie ändern zu'required|same:password'
zu vergleichenpassword
undpassword confirmation
'old_password' => 'required|confirmed',
'password' => 'required|min:4',
'password_confirmation' => 'required|same:password'
Glück!
Eine komplette Funktion, die überprüfen alles. Sie müssen nur senden Sie
old_password
,new_password
undconfirm_password
.