2014-07-18 23 views
8

Trên biểu mẫu đặt lại mật khẩu, người dùng cung cấp current_password, passwordpassword-confirmation. Có cách nào để chỉ định trong quy tắc xác thực rằng current_password (giá trị băm của nó) phải khớp với giá trị cơ sở dữ liệu không?Quy tắc xác thực Laravel 4.2 - Mật khẩu hiện tại phải khớp với giá trị DB

Hiện nay tôi có điều này:

$rules = array(
    'current_password' => 'required', 
    'password'   => 'required|confirmed|min:22' 
); 

Cảm ơn bạn.

CẬP NHẬT

Nhờ @ChrisForrence và @Ben, tôi đã đưa ra những điều sau đây mà hoạt động tuyệt vời! Nhiều đánh giá cao. Hy vọng điều này sẽ giúp người khác:

Validator::extend('hashmatch', function($attribute, $value, $parameters) 
{ 
    return Hash::check($value, Auth::user()->$parameters[0]); 
}); 
$messages = array(
    'hashmatch' => 'Your current password must match your account password.' 
); 
$rules = array(
    'current_password' => 'required|hashmatch:password', 
    'password'   => 'required|confirmed|min:4|different:current_password' 
); 

$validation = Validator::make(Input::all(), $rules, $messages); 
+1

Điều này có thể hữu ích: [Quy tắc xác thực tùy chỉnh] (http://laravel.com/docs/validation#custom-validation-rules) –

+1

Điểm tuyệt vời! Hãy để tôi thử và chúng tôi sẽ thử nó ở đó. Cảm ơn bạn. – PeterKA

Trả lời

3

Bạn có thể không, bcrypt băm là duy nhất (họ có muối ngẫu nhiên của mình kết hợp) vì vậy ngay cả nếu bạn biết mật khẩu văn bản đơn giản của người dùng mà bạn would't có thể làm một so sánh hash-to-hash.

Việc bạn có thể thực hiện là kiểm tra mật khẩu thuần văn bản bằng mã băm bcrypt bằng cách thực hiện Hash::check('plain text password', 'bcrypt hash') trên bộ điều khiển của bạn.

+0

Cảm ơn bạn. Tôi hy vọng giá trị trả về của 'check' là boolean - điều này sẽ giúp ích rất nhiều! – PeterKA

+0

@ user3558931 Vâng, đó là boolean. – Ben

+0

Có thể thực hiện điều đó trong Mô hình không? –

Các vấn đề liên quan