• Gelöst jaderbass

    (@jaderbass)


    Hallo Forum,

    ich betreue die Website eines Kunden. Dieser möchte Kunden deaktivieren können, damit sie sich nicht mehr einloggen können. Dies habe ich gelöst indem ich in der functions.php des Themes den folgenden Code untergebracht habe:

    add_filter( 'wp_authenticate_user', 'chk_active_user',100,2);
    function chk_active_user ($user,$username) {
        $user_data = $user->data;
        $user_id = $user_data->ID;
        $user_sts = (int)get_user_meta($user_id,"active",true);
        if ($user_sts === 0) {
           return new WP_Error( 'disabled_account','Dieses Konto wurde gesperrt!');
    
        } else {
        	return $user;
        }
    	return $user;
    }

    Mein Kunde kann über das Backend die Usermeta-Daten für das Aktivieren / Deaktivieren managen. Das funktioniert auch. Deaktivierte Kunden können sich auch normalerweise nicht anmelden. Auch das funktioniert bei meinen Tests.

    Jetzt konnte sich allerdings trotzdem ein deaktivierter Kunde anmelden. Ich habe daraufhin alle Datenbank-Einstellungen des Kunden geprüft, und das Flag für den Status steht richtig auf „deaktiviert“, was ebenfalls im Backend angezeigt wird. Auch die restlichen Einträge sind in Ordnung (User-Rolle, Berechtigungen etc.).

    Jetzt stelle ich mir gerade die Frage, wie kann denn ein User diese Einstellung umgehen und sich trotzdem anmelden?

    Gibt es hier diesbezüglich Erfahrungen? Weiß jemand in welche Richtung ich suchen muss?

    Mein Kunde benutzt WordPress 4.9.8.

    Die Seite, für die ich Hilfe brauche: [Anmelden, um den Link zu sehen]

Ansicht von 13 Antworten – 1 bis 13 (von insgesamt 13)
  • Moderator Bego Mario Garde

    (@pixolin)

    Moderator (nicht mehr aktiv)

    Wäre es nicht einfacher, Kunden einfach zu löschen, statt sie zu „deaktivieren“? Vielleicht verstehe ich den Sinn der Deaktivierung auch noch nicht ganz.

    Eine andere Möglichkeit wäre, eine Benutzerrolle ohne Rechte zuzuweisen.

    Ich nehme an, dass die „Anmeldung trotz Deaktivierung“ funktioniert, weil der Anmelde-Cookie (dauerhaft angemeldet bleiben) noch im Browser vorhanden war. Der verwendete Hook greift ja nur im Rahmen der Anmeldung, während ein Benutzer mit Anmelde-Cookie bereits angemeldet ist.

    Nachtrag: Schau dir doch das mal an: https://www.wpbeginner.com/plugins/how-to-block-a-wordpress-user-without-deleting-their-account/

    Thread-Starter jaderbass

    (@jaderbass)

    Nein, löschen geht nicht, da der Kunde bereits Aktivitäten auf der Seite durchgeführt hat (Mein Kunde kauft gebrauchte Bücher an) und er eine Aufbewahrungspflicht gegenüber den Behörden hat. Deshalb sollen Kunden deaktiviert werden.

    Das mit dem dauerhaft angemeldet bleiben ist natürlich richtig, manchmal kommt man nicht auf die einfachsten Dinge.

    Weißt Du evtl. eine Möglichkeit auch diese Anmeldung über das Anmelde-Cookie zu sperren? Ich probiere das gleich mal mit der User-Rolle. Ist allerdings für den Kunden keine Lösung. Der will nicht noch in den User-Rollen etwas umstellen. Für ihn muss das mit dem Klick auf „Deaktivieren“ erledigt sein.

    Moderator Bego Mario Garde

    (@pixolin)

    Moderator (nicht mehr aktiv)

    Meinen Nachtrag hast du gesehen?

    Thread-Starter jaderbass

    (@jaderbass)

    Sorry, hatte ich noch nicht. Ich lese mir das gleich mal durch.

    Habe zwischendurch die Funktion wp_clear_auth_cookie(); gefunden, hat aber noch nicht funktioniert.

    Thread-Starter jaderbass

    (@jaderbass)

    Danke. Ich habe es mir angeschaut.

    Ich möchte das Problem allerdings wenn es geht nicht über noch ein Plugin lösen. Die Seite hat momentan noch einige Geschwindigkeitsprobleme und muss ein paar Plugins benutzen, damit sie so funktioniert wie der Kunde es möchte. Ich hatte bereits einige Plugins gefunden, die User deaktivieren können, möchte das aber sozusagen als letzten Ausweg nutzen.

    Moderator Bego Mario Garde

    (@pixolin)

    Moderator (nicht mehr aktiv)

    Naja, dein Code wird ja auch nicht durch Lächeln hinzugefügt. 🙂

    Mann geht wegen Hühnerauge zum Arzt. Arzt empfiehlt Salbe. Patient meint, er nimmt schon eine Salbe für den Rücken und eine andere, weil er sich den Finger verbrannt hat. Noch ne Salbe? Nee, Herr Doktor.

    ¯\_(ツ)_/¯

    Thread-Starter jaderbass

    (@jaderbass)

    Ja, hast ja recht.

    Aber Dein Denkanstoß hat mich definitiv erst mal weiter gebracht. Hab vielen Dank dafür.

    Moderator Bego Mario Garde

    (@pixolin)

    Moderator (nicht mehr aktiv)

    Markieren wir den Thread doch vorerst mal als „gelöst“ und wenn dir noch was einfällt meldest du dich.

    Ob der Kunde jetzt ein ‚deaktiviert‘ anklickt, oder die Rolle wechselt, ist doch der selbe Aufwand, oder?

    🙂

    wp_clear_auth_cookie(); ist der falsche Ansatz. Das funktioniert nur für den aktuellen, gerade angemeldeten User.

    Du möchtest ja aber einen spezifischen Nutzer abmelden. Schau mal hier, ob du damit weiter kommst:
    https://wordpress.stackexchange.com/questions/184161/destroy-user-sessions-based-on-user-id

    Gruß, Torsten

    Thread-Starter jaderbass

    (@jaderbass)

    @radarin:
    Du kennst meinen Kunden nicht 😉
    Allerdings hat die andere Rolle das Problem nicht lösen können. Hier hatte Mario recht. Wenn der Kunde den Haken bei „angemeldet bleiben“ macht wird der Authorisierungsvorgang von WP „umgangen“ und er kann sich anmelden.

    @zodiac1978:
    Das schaut interessant aus. Probiere ich mal aus.

    @jaderbass, du bist der Spezialist und erklärst dem Kunden, so wird es gemacht und anders funktioniert es ‚leider‘ nicht. In diesem Speziellen Fall, wirklich, Kunden, konnen manchmal…

    😉

    Thread-Starter jaderbass

    (@jaderbass)

    Hallo an alle hier in diesem Thread,

    erstmal vielen Dank für die vielen Denkanstöße. Hat mir sehr geholfen. Ich konnte mein Problem folgendermaßen lösen:

    Der ausschlaggebende Hinweis kam von Torsten. Ich habe in der header.php folgendes Code-Schnipsel eingebaut:

    $current_user_id = get_current_user_id();
    $current_user_sts = (int)get_user_meta($current_user_id,"active",true);
    if ($current_user_sts === 0) {
        // get all sessions for user with ID $user_id
        $sessions = WP_Session_Tokens::get_instance($current_user_id);
        
        // we have got the sessions, destroy them all!
        $sessions->destroy_all();
        wp_logout();
    }

    Die User-Meta-Daten zur Aktivierung/Deaktivierung des User werden, wie weiter oben bereits beschrieben, im Backend in der User-Übersicht gesetzt. Ist der User deaktiviert werden die sessions des aktiven Users gelöscht und der User wird ausgeloggt. Weiter unten wird dann daraufhin noch eine Meldung ausgegeben, dass das Konto gesperrt wurde.

    Ich hatte mir noch den Kopf darüber zerbrochen, ob das evtl. mit einem Hook eleganter zu lösen ist, habe aber keinen passenden gefunden. Für Denkanstöße in diese Richtung bin ich natürlich auch dankbar.

    Einige der angebotenen Plugins zur Deaktivierung der Kunden haben entweder nicht funktioniert, waren zu alt, haben Fehler produziert oder waren zu umständlich zu bedienen und haben letztendlich nicht wirklich zur Lösung des Problems beigetragen.

    Also nochmal vielen Dank
    Jörg

Ansicht von 13 Antworten – 1 bis 13 (von insgesamt 13)
  • Das Thema „Deaktivierter Kunde kann sich trotzdem anmelden“ ist für neue Antworten geschlossen.