web-dev-qa-db-fra.com

Connexion automatique après l'enregistrement

J'aimerais que l'utilisateur soit automatiquement connecté sans entrer son nom d'utilisateur et son mot de passe lorsqu'il clique sur le lien contenu dans le courrier électronique envoyé après avoir rempli le formulaire d'inscription.

Comment puis je faire ça?

1
user3055211

Voici une approche de base.

Tout d'abord, vous devez passer quelque chose dans le lien pour donner certaines informations d'utilisateur que vous pouvez utiliser pour vous connecter. Pour cela, vous devez filtrer le courrier électronique qui est envoyé à l'utilisateur. (Il serait possible de charger un nouveau courrier électronique d'enregistrement d'utilisateur personnalisé, mais cela devrait être fait comme un plugin, car cette fonction est une fonction pouvant être connectée. Au lieu de cela, cette méthode ne fait que filtrer le contenu du courrier électronique en fonction de la ligne de sujet. pour l'email d'inscription.)

// Ajouter un filtre pour le corps de l'e-mail d'inscription

add_filter( 'wp_mail', 'set_up_auto_login_link' );

function set_up_auto_login_link( $atts ) {

    // if the email subject is "Your username and password"
    if ( isset ( $atts ['subject'] ) && $atts['subject'] = 'Your username and password' ) {
        if ( isset( $atts['message'] ) ) {

            $old = '/wp-login.php';
            $new = '/wp-login.php?user=' . $_POST['user_login'];

            $atts['message'] = str_replace( $old, $new, $atts['message'] );
        }
    }
    return $atts;
}

Cela mettra le nom d'utilisateur sélectionné du formulaire d'inscription dans l'e-mail sous la forme d'une chaîne de requête ajoutée au lien de connexion. Ce nom d'utilisateur peut être utilisé pour connecter l'utilisateur lorsqu'il clique sur le lien.

Pour ce faire, j'ai adhéré à l'action init. Cela vérifiera le paramètre "utilisateur" dans la chaîne de requête. Si cela existe, il utilise get_user_by pour obtenir les données de l'utilisateur par leur nom d'utilisateur (login). Si cela retourne un utilisateur valide, nous pouvons utiliser le nom d'utilisateur et l'ID utilisateur récupéré pour connecter l'utilisateur à:

add_action( 'init', 'log_user_in' );
function log_user_in() {
    if ( isset( $_GET['user'] ) ) {

        // get the username from the URL
        $user_login = $_GET['user'];

        // get the user data (need the ID for login)
        $user = get_user_by( 'login', $user_login );

        // if a user is returned, log them in
        if ( $user && ! user_can( $user->ID, 'manage_options' ) ) {
            wp_set_current_user( $user->ID, $user_login );
            wp_set_auth_cookie( $user->ID );
            do_action( 'wp_login', $user_login );
            wp_redirect( home_url() );
            exit();
        }
    }
}

Notez que cette procédure ne vous donne aucune sécurité réelle, car toute personne possédant un nom d'utilisateur valide peut se connecter en tant qu'utilisateur. Il s'assure que l'utilisateur en cours de connexion n'est pas un administrateur (user_can ('manage_options')), sinon toute personne disposant du nom d'utilisateur admin pourra y accéder. Il serait sage d'intégrer des vérifications supplémentaires - créez probablement une clé ou un hachage à ajouter également au lien, une opération effectuée lors de l'enregistrement et pouvant être utilisée pour valider l'utilisateur.

1
butlerblog