Theo mặc định, để đăng nhập vào wordpress bạn cần có username và mật khẩu truy cập. Đây là điều thông thường và là chuyện hiển nhiên khi sử dụng wordpress. Nhưng vì một số lý do nào đó (vấn đề bảo mật và tránh dò ra username để truy mật khẩu ngẫu nhiên chẳng hạn) bạn muốn người dùng (hay chính bản thân bạn) đăng nhập bằng email thay cho việc sử dụng username thông thường thì sao ?
Nếu hiểu rõ về hệ thống vận hành của wordpress bạn hoàn toàn có thể thực hiện được việc này bằng cách thay đổi một số thành phần trong hệ thống wordpress. Điều này không khó như bạn nghĩ.
Đầu tiên, việc kiểm tra phiên làm việc của một user nào đó trong hệ thống sẽ được thực hiện thông qua hàm wp_authenticate sau khi user đó đăng nhập. Từ đây, thay vì lấy thông tin user thông qua username từ đó so sánh với mật khẩu chúng ta sẽ làm điều đó với địa chỉ email. Thứ cuối cùng mà chúng ta nhận được vẫn là thông tin đầy đủ của user tương tự như việc sử dụng username để truy vấn:
[code language=”php”] add_action( ‘wp_authenticate’, ’email_address_login’ );function email_address_login( &$username, &$password )
{
$user = get_user_by( ’email’, $username );
if( !empty( $user->user_login ) )
{
$username = $user->user_login;
}
}
[/code]
Nếu bạn để ý kỹ đoạn mã trên, bạn sẽ thấy thứ cuối cùng thông tin cuối cùng mà chúng ta có được vẫn là $username của người dùng nhưng chỉ thay đổi một chút là bạn lấy thông tin đó qua email. Do đó, khi được đưa vào wp_authenticate để kiểm tra, hệ thống vẫn kiểm tra thông qua username và password như bình thường.
Và nếu bạn vẫn còn thắc mắc một chút về việc wordpress kiểm tra thông tin đăng nhập như thế nào, bạn có thể mở file /wp-includes/user.php và bạn sẽ thấy
[code language=”php”]
do_action_ref_array( ‘wp_authenticate’, array( &$credentials[‘user_login’], &$credentials[‘user_password’] ) );
[/code]
Tham số đầu vào của hàm vẫn sẽ không đổi. Chỉ có khác ở đây là phương pháp chúng ta tìm kiếm và lấy thông số đầu vào cho hàm mà thôi.
Bạn thấy đấy, một thay đổi nhỏ cũng có thể khiến hệ thống của bạn khác biệt và bảo mật hơn nhiều lần :)
Phong Tran says
he, thủ thuật nhỏ nhưng rất tiện ích, thay vì nhớ username người dùng chỉ cần nhập email mà hầu hết các site đều sử dụng hiện nay. Nhưng có thể làm thế nào để vừa sử dụng username và email được không bác nhỉ?
hackphonehy says
Thủ thuật hay và tiện ích, phải áp dụng ngay mấy được