Από προεπιλογή το WordPress χρησιμοποιεί ένα μοναδικό όνομα χρήστη για κάθε χρήστη που είναι εγγεγραμμένος στην ιστοσελίδα.
Το όνομα αυτό χρησιμοποιείται κάθε φορά που ο χρήστης επιθυμεί να εισέλθει στη σελίδα, καθιστώντας πολύ εύκολο στους hackers να έχουν τις μισές πιθανότητες επιτυχίας σε ένα brute force attack, εφόσον γνωρίζουν το όνομα.
Η ακόλουθη δημοσίευση περιγράφει πως θα αλλάξετε την προεπιλεγμένη ρύθμιση του WordPress, ούτως ώστε οι χρήστες τις ιστοσελίδας σας να συνδέονται χρησιμοποιώντας το e-mail τους αντί το όνομα χρήστη.
Για να το κάνουμε θα χρησιμοποιήσουμε το wp_authenticate δράσης το οποίο τρέχει από το WοrdPress για τον έλεγχο ταυτότητας του χρήστη. Θα πρέπει να γνωρίζετε ότι σε κάθε ενημέρωση λογισμικού από την WοrdPress θα πρέπει να πραγματοποιείτε τα ίδια βήματα που περιγράφουμε παρακάτω.
Ουσιαστικά θα αλλάξουμε την τιμή $username (το οποίο είναι το όνομα χρήστη που εμφανίζει η φόρμα σύνδεσης). Έτσι μπορούμε να προσθέσουμε το e-mail του χρήστη.
Χρησιμοποιήστε τον παρακάτω κώδικα
function email_login($username) { $user = get_user_by_email($username); if(!empty($user->user_login)) // if the email exists for a user return $username = $user->user_login; // user_login or else the same string is return $username; // returned for verification } add_action('wp_authenticate', 'email_login');
Είναι σημαντικό να γνωρίζετε ότι το συγκεκριμένο function λειτουργεί διαφορετικά από άλλα functions του WordPress στέλνοντας τις παραμέτρους σαν σημείο αναφοράς. Πράγμα που σημαίνει ότι το function αυτό θα είναι καλύτερα προσαρμοσμένο στον πυρήνα σαν φίλτρο. Αυτό απαιτεί από εσάς να πάρετε τις παραμέτρους, και να αλλάξετε τις τιμές και την επιστροφή τους.
Έτσι αν ο παραπάνω κώδικας δεν λειτουργεί ελέγξτε το αρχείο /wp-includes/user.php στη γραμμή 54 και θα δείτε το κώδικα
do_action_ref_array( 'wp_authenticate', array( &$credentials['user_login'], &$credentials['user_password'] ) );
Κανονικά, τα functions, χρησιμοποιούν τη λειτουργία
do_action ()
αλλά το συγκεκριμένο χρησιμοποιεί τη λειτουργία
do_action_ref_array ()
και περνά από τις τιμές αναφοράς.
Σε περίπτωση που δεν λειτουργεί για σας, αλλάξτε τον τύπο του function σε
do_action ()