2009-11-26 32 views
8

Tôi đang làm việc trên một cổng dựa trên Wordpress tích hợp với một thương mại điện tử tùy chỉnh. Thương mại điện tử cũng là một 'bảng điều khiển': tất cả các vai trò được thiết lập ở đó. Một số người dùng được ghi lại nhưng 'không hoạt động'; họ không thể đăng nhập vào Wordpress. Vì lý do này, tôi cần phải móc vào hệ thống đăng nhập Wordpress.Làm cách nào để móc vào hệ thống đăng nhập Wordpress để ngăn một số người dùng lập trình?

Nếu người dùng nói "bad_james", anh ấy không thể đăng nhập, ngay cả khi anh ấy có thông tin đăng nhập WP và PWD hợp lệ. Bảng điều khiển quản trị WP không cung cấp cờ để chặn người dùng.

Có cách nào để triển khai bộ lọc đăng nhập không?

Chúc mừng,
Davide

Trả lời

9

Bạn có thể quá tải wp_authenticate chức năng (xem các chức năng trong mã ở đây: http://core.trac.wordpress.org/browser/trunk/wp-includes/pluggable.php) và trả về một WP_error nếu bạn không muốn cho phép người dùng đăng nhập.

Hoặc tốt hơn, hãy sử dụng bộ lọc authenticate và trả lại null nếu bạn không muốn người dùng đăng nhập, ví dụ:

add_filter('authenticate', 'check_login', 10, 3); 
function check_login($user, $username, $password) { 
    $user = get_userdatabylogin($username); 

    if(/* check to see if user is allowed */) { 
     return null; 
    } 
    return $user; 
} 
+7

Để bộ lọc hoạt động, tôi phải thay đổi mức ưu tiên từ 10 đến 40. Lõi WordPress có một số bộ lọc để xác thực với mức độ ưu tiên là 20 và 30. Đặt mức ưu tiên của chúng tôi là 40 đảm bảo bộ lọc của chúng tôi chạy cuối cùng . – joeljoeljoel

+1

get_userdatabylogin không được dùng nữa. Nên chuyển nó thành cái gì đó như '$ user = get_user_by ('login', 'loginname');' – Cam

8

Có một vài vấn đề với câu trả lời mjangda vì vậy tôi đăng một phiên bản làm việc với WordPress 3.2

Những vấn đề chính là với câu lệnh return. Anh ta nên trả về một đối tượng WP_User. Vấn đề khác là ưu tiên không đủ cao.

add_filter('authenticate', 'check_login', 100, 3); 
function check_login($user, $username, $password) { 
    // this filter is called on the log in page 
    // make sure we have a username before we move forward 
    if (!empty($username)) { 
     $user_data = $user->data; 

     if (/* check to see if user is allowed */) { 
      // stop login 
      return null; 
     } 
     else { 
      return $user; 
     } 
    } 

    return $user; 
} 
Các vấn đề liên quan