2013-07-27 17 views
10

Bir kullanıcının veritabanında aynı şifreyi yazıp göndermediğini kontrol etmem gerekiyor. Eski parola alanı 'oldpass'. Oluşturduğum özel onaylayıcıya 'passcheck' denir. Buna göre başarısız veya geçmelidir.Laravel hesapta parola alanı için validator

KullanıcılarKullanıcı kodu aşağıda çalışmıyor. Ne yanlış yapabilirdim?

$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

Soru nedir? –

+0

Hehe, @TryingTobemyselfRahul Sadece soruyu güncelledim. Düzeltme için teşekkürler. Lütfen – TechyTimo

cevap

19

Böyle bir şey kullanmalısınız,

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

Yani, username veya başka herhangi bir field kullanarak kayıt almak ve sonra şifreyi kontrol etmeliyiz.

@lucasmichot daha da kısa bir çözüm önerdi:

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

'u kontrol edin Çok teşekkür ederim! Şöyle yazılmamış diğer girişler, örneğin: \t \t: (Giriş :: get ('termsandconditions') == '0') {return false;} else {return true;} ;}); – TechyTimo

+2

Hoş Geldiniz, 'if (Input :: get ('termsandconditions') == 0) {// kontrol edilmedi}', ayrıca kontrol edin [kabul edildi] (http://four.laravel.com/docs/validation#rule kabul edilmiş) geçerlilik kuralı. –

4

bir Html elemana Kuralınızı kravat yok edin. Özel kurallarınızı oluşturmak için Laravel'in sağladığı parametreleri kullanın. Bu (bir kullanıcı kimliği doğrulanmış olduğunu darlık) olacaktır:

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

böyle yapmak olacaktır: Bu doğrulayıcı kural geçerli kullanıcının şifre kontrol etmek veritabanı sorgusu yapacak

/** 
* 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; 
    } 
}); 

Bunu daha da kısaltabilir ve sorguyu kaydedebilirsiniz:

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