WordPress: come inviare agli utenti il link per il reset della password

WordPress: come inviare agli utenti il link per il reset della password

In questo tutorial vedremo come inviare ad un utente appena registrato il link per reimpostare la password del suo account in un sito in WordPress.

Inviare la password generata in fase di registrazione è una cattiva pratica assolutamente sconsigliata poiché espone il nostro sito e l'utente stesso a potenziali rischi di sicurezza.

In WordPress per registrare un nuovo utente è sufficiente l'email, uno username e la password. La password può essere generata da una funzione di WordPress che vedremo e il nome utente può coincidere con l'email stessa. Questa caratteristica ci consente di registrare un nuovo utente di fatto usando la sola email.

Quindi non appena abbiamo creato la nuova utenza, possiamo inviare un'email al nuovo utente contenente il link per reimpostare la password. Tale link punta normalmente a wp-login.php e presenta un hash univoco legato solo a quella specifica richiesta e solo a quello specifico utente.

function my_register_new_user( $email ) {
    if( !filter_var( $email, FILTER_VALIDATE_EMAIL ) || email_exists( $email ) ) {
        return false;
    }
    $user_id = wp_create_user( $email, wp_generate_password(), $email );
    if( is_wp_error( $user_id ) ) {
        return false;
    }
    $user = new WP_User( (int) $user_id );
    $reset_key = get_password_reset_key( $user );
    $user_login = $user->user_login;
    $reset_password_url = network_site_url("wp-login.php?action=rp&key=$reset_key&login=" . rawurlencode($user_login), 'login');
    
    return wp_mail( $email, __( 'Password Reset', 'textdomain' ), $reset_password_url );
}

Questa funzione accetta come parametro un indirizzo email valido e non registrato in precedenza. Crea un nuovo utente con il ruolo predefinito di subscriber generando una password casuale con la funzione wp_generate_password().

Quindi, ottenuto l'ID del nuovo utente, lo usa per creare una nuova istanza della classe WP_User per poter ottenere la chiave univoca per reimpostare la password. Tale chiave, unitamente allo username dell'utente, viene inserita nella query string che parte dall'URL principale del file wp-login.php del nostro sito (network_site_url() è usata in modo da assicurare la compatibilità in caso di un'installazione MultiSite).

Infine, la funzione invia l'email al nuovo utente contenente il link per effettuare il reset della password.

Torna su