it-swarm.com.de

Überprüfen Sie die Benutzer-Metadaten bei der Anmeldung

Auf meiner Website haben Benutzer ein Metadatenattribut, das entweder auf true oder false festgelegt ist, je nachdem, ob sie ihre E-Mail-Adresse bestätigt haben oder nicht. Ich versuche, sie nicht anmelden zu lassen, wenn sie ihre E-Mail nicht bestätigt haben, sondern sie sich anmelden zu lassen, wenn sie dies getan haben.

Um dies zu erreichen, habe ich meiner functions.php-Datei den folgenden Code hinzugefügt. Mit dieser Option kann sich jedoch niemand anmelden. Wo liegt der Fehler?

<?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

Wenn Sie den Filter wp_authenticate_user verwenden, erhalten Sie das Benutzerobjekt, für das Sie die Benutzer-ID verwenden müssen, um das Benutzer-Meta abzurufen

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');

Aber ich denke, Sie sollten die Aktion wp_authenticate besser verwenden, da sie vor dem Filter authenticate ausgeführt wird.

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