Thêm trường xác thực bổ sung trong trang đăng nhập


7

Tôi sẽ tăng cường trang xác thực WordPress của tôi. Ý tưởng của tôi là chỉ cần thêm một trường bổ sung vào trang đăng nhập. Trường thêm sẽ yêu cầu người dùng nhập mã nhận dạng cá nhân (4 đến 8 chữ số).

Tôi đã thay đổi bố cục trang đăng nhập wp-login.phpvà thêm cột để lưu mã nhận dạng cá nhân trong cơ sở dữ liệu MySQL.

Tuy nhiên, tôi không biết phần nào của mã hóa được sử dụng để xác minh mật khẩu khi tôi muốn đề cập đến mã hóa hiện có.

Làm thế nào tôi có thể làm điều đó một cách hiệu quả?

Câu trả lời:


13

Trước hết, tôi khuyên bạn không nên chỉnh sửa các tệp cốt lõi vì nó sẽ bị ghi đè khi bạn cập nhật tiếp theo WordPress.

Ngoài ra, bạn nên cập nhật WordPress, bởi vì nó thường sẽ bao gồm các cập nhật bảo mật. (Gần đây đã được báo cáo rằng đã có một loạt các cuộc tấn công vào các trang web sử dụng các phiên bản WordPress lỗi thời)

Để đạt được những gì bạn thực sự muốn làm, tôi khuyên bạn nên sử dụng hook là cách tốt nhất để chỉnh sửa WordPress.

Như vậy, để tạo thêm một trường trên trang đăng nhập của bạn, bạn có thể sử dụng login_formmóc hành động:

add_action('login_form','my_added_login_field');
function my_added_login_field(){
    //Output your HTML
?>
    <p>
        <label for="my_extra_field">My extra field<br>
        <input type="text" tabindex="20" size="20" value="" class="input" id="my_extra_field" name="my_extra_field_name"></label>
    </p>
<?php
}

Tiếp theo, chúng tôi cần xác minh rằng những gì họ nhập vào trường khớp với những gì bạn đã lưu trữ. Trong đoạn mã sau, tôi đã giả sử bạn đã lưu mã nhận dạng dưới dạng giá trị meta của người dùng bằng khóa meta my_ident_code. Bạn nên làm điều này hơn là tạo cột của riêng bạn! . Xem các trang Codex cho

Để xác minh người dùng, bạn có thể sử dụng authenticatebộ lọc. Điều này vượt qua tên người dùng và mật khẩu đã nhập. Nếu mã nhận dạng là chính xác, hãy quay lại nullđể cho phép WordPress xác minh mật khẩu và tên người dùng. Nếu không đúng, hãy xóa xác thực của WordPress và trả lại lỗi. Điều này buộc người dùng quay lại trang đăng nhập, nơi họ sẽ thấy lỗi được hiển thị.

add_filter( 'authenticate', 'my_custom_authenticate', 10, 3 );
function my_custom_authenticate( $user, $username, $password ){
    //Get POSTED value
    $my_value = $_POST['my_extra_field_name'];

    //Get user object
    $user = get_user_by('login', $username );

    //Get stored value
        $stored_value = get_user_meta($user->ID, 'my_ident_code', true);

    if(!$user || empty($my_value) || $my_value !=$stored_value){
        //User note found, or no value entered or doesn't match stored value - don't proceed.
            remove_action('authenticate', 'wp_authenticate_username_password', 20);
            remove_action('authenticate', 'wp_authenticate_email_password', 20); 

        //Create an error to return to user
            return new WP_Error( 'denied', __("<strong>ERROR</strong>: You're unique identifier was invalid.") );
    }

    //Make sure you return null 
    return null;
}

2

Câu trả lời này chỉ nhằm mục đích tham khảo.

Bạn không nên chỉnh sửa các tệp cốt lõi Các tệp WordPress nếu không bạn sẽ mất các sửa đổi sau khi cập nhật.

Dưới đây là cách WordPress xử lý quy trình xác minh mật khẩu đăng nhập như đã thấy trên dòng 250 của /wp-includes/class-phpass.phptệp:

function CheckPassword($password, $stored_hash)
{
    $hash = $this->crypt_private($password, $stored_hash);
    if ($hash[0] == '*')
        $hash = crypt($password, $stored_hash);

    return $hash == $stored_hash;
}

0

Nếu chỉnh sửa tất cả các mã đó có vẻ hơi nản chí, có một plugin tốt cho việc này:

Cimy Extra Field

Hoặc bạn có thể xem xét sử dụng Theme My đăng nhập có thể thực hiện việc này, nhưng phải mất một số mã hóa. Nó cũng thêm một chút chức năng bổ sung. Bạn có thể vui vẻ sử dụng hai plugin này với nhau.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.