web-dev-qa-db-fra.com

Vérifier les métadonnées de l'utilisateur à la connexion

Sur mon site Web, les utilisateurs ont un attribut de métadonnées défini sur true ou false selon qu'ils ont confirmé leur adresse électronique ou non. J'essaie de ne pas les laisser se connecter s'ils n'ont pas confirmé leur courrier électronique, mais de les laisser se connecter s'ils l'ont déjà fait.

Pour ce faire, j'ai ajouté le code suivant à mon fichier functions.php. Cependant, avec cela en place, il ne laissera personne se connecter. Où est l'erreur?

<?php
function isUserActivated($user){
    $userStatus = get_user_meta($user, 'account_activated', true);
    $login_page  = home_url('/login/');
    if($userStatus == 0){
        wp_redirect($login_page . "?login=failed");
        exit;
    }
}

add_filter('wp_authenticate_user', 'isUserActivated');
1
Philipp K

Si vous utilisez le filtre wp_authenticate_user vous obtenez l'objet utilisateur, vous devez utiliser l'ID utilisateur pour obtenir la méta utilisateur

function isUserActivated($user){
    $userStatus = get_user_meta($user->ID, 'account_activated', true);

    // for testing $userStatus = 1;
    $login_page  = home_url('/login/');
    if($userStatus == 0){
        wp_redirect($login_page . "?login=failed");
        exit;
    }

    return $user;
}

add_filter('wp_authenticate_user', 'isUserActivated');

Mais je pense qu'il vaut mieux utiliser l'action wp_authenticate car elle est exécutée avant le filtre authenticate.

function isUserActivated($username){

    // First need to get the user object
    $user = get_user_by('login', $username);
    if(!$user) {
        $user = get_user_by('email', $username);
        if(!$user) {
            return $username;
        }
    }

    $userStatus = get_user_meta($user->ID, 'account_activated', true);

    //for testing $userStatus = 1;
    $login_page  = home_url('/login/');
    if($userStatus == 0){
        wp_redirect($login_page . "?login=failed");
        exit;
    }

}

add_action('wp_authenticate', 'isUserActivated');
2
Shibi