2013-07-27 14 views
10

Devo verificare se un utente ha pubblicato la stessa password di quella nel database. Il campo per la vecchia password è 'oldpass'. Il validatore personalizzato che ho creato è chiamato "passcheck". Dovrebbe fallire o passare di conseguenza.Validatore Laravel 4 per campo password nell'account di modifica

Il mio codice UtenteController di seguito non funziona. Cosa avrei potuto fare di sbagliato?

$rules = array(
     'oldpass' => 'passcheck', 
    ); 

    $messages = array(
     'passcheck' => 'Your old password was incorrect', 
    ); 


    Validator::extend('passcheck', function($attribute, $value, $parameters) 
    { 
     if(!DB::table('users')->where('password', Hash::make(Input::get('oldpass')))->first()){ 
      return false; 
     } 
     else{ 
      return true; 
     }; 
    }); 

    $validator = Validator::make($inputs, $rules, $messages); 
+0

quindi qual è la domanda? –

+0

Hehe, @TryingTobemyselfRahul Ho appena aggiornato la domanda. Grazie per la correzione. Si prega di verificare – TechyTimo

risposta

19

Si dovrebbe usare qualcosa di simile,

$user = DB::table('users')->where('username', 'someusername')->first(); 
if (Hash::check(Input::get('oldpass'), $user->password)) { 
    // The passwords match... 
    return true; 
} 
else { 
    return false; 
} 

Quindi, è necessario vedere la scheda utilizzando username o qualsiasi altro field e quindi controllare la password.

@lucasmichot offerto soluzione ancora più breve:

Validator::extend('passcheck', function ($attribute, $value, $parameters) 
{ 
    return Hash::check($value, Auth::user()->getAuthPassword()); 
}); 
+0

Grazie mille! Che ne dici di ogni altro input che non è hash, ad esempio una casella di controllo che può essere utilizzata con: \t \t if (Input :: get ('termsandconditions') == '0') {return false;} else {return true;} ;}); – TechyTimo

+2

Prego, 'if (Input :: get ('termsandconditions') == 0) {// not checked}', controlla anche [accettato] (http://four.laravel.com/docs/validation#rule -accettabile) regola di convalida. –

4

prego non legare la regola di un elemento HTML. Utilizza i parametri forniti da Laravel per creare le tue regole personalizzate. Questo sarebbe (asuming che si è un utente autenticato):

Validator::extend('passcheck', function($attribute, $value, $parameters) { 
    return Hash::check($value, Auth::user()->password); // Works for any form! 
}); 

$messages = array(
    'passcheck' => 'Your old password was incorrect', 
); 

$validator = Validator::make(Input::all(), [ 
    'oldpass' => 'passcheck', 
    // more rules ... 
], $messages); 
6

vorrei fare in questo modo:

/** 
* Rule is to be defined like this: 
* 
* 'passcheck:users,password,id,1' - Means password is taken from users table, user is searched by field id equal to 1 
*/ 
Validator::extend('passcheck', function ($attribute, $value, $parameters) { 
    $user = DB::table($parameters[0])->where($parameters[2], $parameters[3])->first([$parameters[1]]); 
    if (Hash::check($value, $user->{$parameters[1]})) { 
     return true; 
    } else { 
     return false; 
    } 
}); 

Questa regola validatore farà query di database per verificare la password dell'utente corrente

Puoi renderlo ancora più breve e salvare la query:

Validator::extend('passcheck', function ($attribute, $value, $parameters) { 
    return Hash::check($value, Auth::user()->getAuthPassword()); 
}); 
Problemi correlati