2015-08-29 5 views
5

Ich versuche, eine Passwort-Änderung für meine angemeldeten/autorisierten Benutzer hinzuzufügen. Es ist Ihre einfache alte generische Einrichtung:Bestätigen/Autorisieren des aktuellen Passworts in Laravel 5.1

Current Password 
New Password 
Confirm New Password 

Natürlich kann ich nur auf die neue Passwort und Passwortbestätigung verwenden validieren, aber wie kann ich das aktuelle Passwort gegen ihr tatsächliches aktuelles Passwort eingegeben genehmigen?

Im Benutzermodell password ist eine versteckte Eigenschaft, so dass ich sie nicht nur zusammenbringen kann.

Ich habe versucht, durch Illiminate\Auth und Guard zu schauen, aber ich habe es nirgends gesehen. Vielleicht habe ich es verpasst, oder mache ich das vielleicht falsch?

+0

Lassen Sie mich wissen, ob meine Antwort das ist, wonach Sie suchen. – MaXi32

Antwort

10

Hier ist die Antwort, falls jemand anderes sucht:

$validator = $this->validator($request->all()); 

$validator->after(function($validator) use ($request) { 
    $check = auth()->validate([ 
     'email' => $this->user->email, 
     'password' => $request->current_password 
    ]); 

    if (!$check): 
     $validator->errors()->add('current_password', 
      'Your current password is incorrect, please try again.'); 
    endif; 
}); 

if ($validator->fails()): 
    return redirect('account/password') 
     ->withErrors($validator) 
     ->withInput(); 
endif; 

$this->user->password = bcrypt($request->password); 
$this->user->save(); 
+1

Ist es möglich, diese Checks in Anfrage direkt hinzuzufügen? – naneri

1

Holen Sie sich das aktuelle Passwort und vergleichen Sie es mit dem neuen Passwort.

//use Auth, Hash, Input; 

if (Hash::check(Input::get('new_password'), Auth::user()->password)) 
     echo "Matched"; 
else 
     echo "Not matched"; 

Haben Sie das Laravel-Authentifizierungspaket verwendet? Wenn ja, wurde die Validierung für Sie durchgeführt. Überprüfen Sie App/Http/Controller/Auth/AuthController.php, Sie können diese Validierungsfunktion sehen. Sie können mehr hinzufügen, wenn Sie !:

protected function validator(array $data) 
{ 
    return Validator::make($data, [ 
     'first_name' => 'required|max:255', 
     'last_name' => 'required|max:255', 
     'email' => 'required|email|max:255|unique:users', 
     'password' => 'required|confirmed|min:6', 
    ]); 
} 

wünschen Wenn ein Fehler während der obigen Validierung geschieht, wird es Variable auf die $ Fehler gesendet werden, wo Ihre Klinge um sie zu fangen. Also, in Ihrem Passwort zurücksetzen Ansicht (Ansicht/Auth/reset.blade.php), können Sie die Validierungsfehler wie folgt fangen:

@if (count($errors) > 0) 
         <div class="alert alert-danger"> 
          <strong>Whoops!</strong> There were some problems with your input.<br><br> 
          <ul> 
           @foreach ($errors->all() as $error) 
            <li>{{ $error }}</li> 
           @endforeach 
          </ul> 
         </div> 
@endif 
+0

Komisch, es hat nicht funktioniert, ich habe das anfangs versucht. Aber leider hilft das nicht so sehr, wie ich hoffe, da ich noch einen eigenen Validator schreiben muss, um den Vergleich zu machen. Kaum zu glauben, dass dies nicht bereits Teil des Validators ist. –

+0

Hallo, ich habe meine Antwort aktualisiert. Haben Sie das Laravel-Authentifizierungspaket verwendet? Wenn ja, müssen Sie keinen benutzerdefinierten Validator schreiben. Es ist für Sie erledigt, nur dass Sie diesen Fehler in der Blade-Ansicht anzeigen müssen. Bitte lassen Sie mich wissen, wenn das die Antwort ist, nach der Sie suchen, und wenn Sie mehr Klarheit brauchen, fragen Sie einfach. :) – MaXi32

+0

Ja, es ist klar in der Frage angegeben, dass dies für eingeloggte Benutzer ist. Und ja, sie wurden mit dem gebackenen Authentifizierungssystem erstellt. –