2015-08-29 24 views
5

Sto tentando di aggiungere una funzionalità di modifica della password per i miei utenti registrati/autorizzati. E 'il tuo pianura generico insieme ole up:Convalida/Autorizza password corrente in Laravel 5.1

Current Password 
New Password 
Confirm New Password 

Ovviamente posso solo usare convalidare sulla nuova conferma della password e la password, ma come faccio a autorizzare la password corrente presentato contro la loro password corrente reale?

Nel modello utenti password è una proprietà nascosta, quindi non posso semplicemente abbinarli.

Ho provato a guardare attraverso Illiminate\Auth e Guard ma non l'ho visto da nessuna parte. Forse mi sono perso, o forse sto andando su questo nel modo sbagliato?

+0

Fammi sapere se la mia risposta è ciò che stai cercando. – MaXi32

risposta

10

Ecco la risposta nel caso in cui nessun altro è alla ricerca:

$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

È possibile aggiungere direttamente questi assegni nella richiesta? – naneri

1

Ottenere la password corrente e confrontarla con la nuova password.

//use Auth, Hash, Input; 

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

Hai utilizzato il pacchetto di autenticazione integrato di laravel? Se sì, la convalida è stata fatta per te. Controlla app/Http/Controller/Auth/AuthController.php, puoi vedere questa funzione di validazione. È possibile aggiungere di più se lo si desidera !:

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', 
    ]); 
} 

Se qualsiasi errore si verifica durante la convalida di cui sopra, sarà inviato ai $ errori variabile in cui il vostro vista lama li può prendere. Così, nella vostra reimpostazione della password vista (view/auth/reset.blade.php), si può prendere gli errori di convalida come segue:

@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

Strano non ha funzionato, quando l'ho provato inizialmente. Ma ahimè, questo in realtà non aiuta tanto quanto spero che avrò ancora bisogno di scrivere un validatore personalizzato per fare il confronto. Difficile credere che questo non sia già parte del validatore. –

+0

Ciao, ho aggiornato la mia risposta. Hai usato il pacchetto di autenticazione integrato di laravel? Se sì, non è necessario scrivere un validatore personalizzato. È fatto per te, solo che devi visualizzare quell'errore nella vista lama. Per favore fatemi sapere se questa è la risposta che state cercando e se avete bisogno di ulteriori chiarimenti, basta chiedere. :) – MaXi32

+0

Sì, è chiaramente indicato nella domanda che questo è per gli utenti registrati. E sì, sono stati creati con il sistema auth in forno. –