Support » Plugins » WP Mitglieder nur 2 Logins erlauben

  • Hallo,
    ich suche einen Weg wie ich Mitglieder des Plugins WP Member nach 2-5 Logins auf inaktiv / sperren / deaktiviert setzen kann. Leider habe ich bisher nichts gefunden.

    Hat jemand eine Idee?

    Grüße

Ansicht von 12 Antworten - 1 bis 12 (von insgesamt 12)
  • Die Anzahl der Anmeldungen zu begrenzen erscheint mir wenig sinnvoll, weil ich (auch durch die Option „angemeldet bleiben“) den Anmeldezeitraum stark variieren kann. Sinnvoller erscheint mir das Plugin Expire Users, bei dem ich ein Ablaufdatum oder eine maximale Laufzeit vorgeben kann.

    Da du noch kein Plugin verwendest und Plugin-Suche nichts mit Anwendungs-Support zu tun hat, ändere ich den Status des Thread auf „keine Support-Frage“.

    Thread-Ersteller ostseehuepfer

    (@ostseehuepfer)

    Moin Moin,

    Ich verwende ja das WP-Member Plugin. Darin kann ich ja genau die Funktionen des von Dir beschriebenen Plugins schon realisieren. -> Mitgliedsschaftstufe -> Zugriffsdauer. Gewünscht ist folgendes: Man bekommt Login Daten zur verfügung gestellt für ein Event. Nach 3 Logins soll der Zugang eigentlich verfallen um zu verhindern das ein Zugang unendlich nutzbar ist.

    Grüße

    Dazu kenne ich keine fertige Lösung, aber das lässt sich sicher programmieren.

    Thread-Ersteller ostseehuepfer

    (@ostseehuepfer)

    Alternativ müsste es möglich sein dies über ip Adressen zu limitieren?!

    Über die IP-Adresse zu limitieren ist sinnlos. Ein User kann mit unterscheidlichen Zugängen im Netz sein, bei mir sind es in der Regel 4 bis 5 unterschiedliche Zugänge jede Woche. Und wenn ich es drauf anlege, kann ich das locker erhöhen. Mal ganz von Firmennetzen zu schweigen, da sind mehrere User mit der gleichen IP unterwegs.

    • Diese Antwort wurde geändert vor 3 Wochen, 5 Tage von bscu.
    Thread-Ersteller ostseehuepfer

    (@ostseehuepfer)

    Aber es dürfte doch möglich sein dafür zu sorgen, dass ein Benutzer sich nicht mit unendlich vielen Geräten anmelden kann.

    Die Logindaten werden vorab generiert und verteilt. Eine Registrierung ist nicht möglich. Ich möchte nur verhindern das zum Tag x an dem das ganze benötigt wird jeder User nur mit einem oder zwei Devices schauen kann.

    Ich möchte nur verhindern das zum Tag x an dem das ganze benötigt wird jeder User nur mit einem oder zwei Devices schauen kann.

    Ich bin mit meinem Smartphone jeden Tag mindestens in 3 unterschiedlichen Netzen unterwegs, da hilft die IP-Adresse herzlich wenig. Das einzig halbwegs sichere Erkennungsmerkmal wäre die Mac-Adresse des Gerätes, aber an die kommst du nicht dran.
    Du kannst nur über die eMail-Adresse die Logins zählen und darfst keine Cookies benutzen. Aber auch das ist nicht zu 100% sicher, weil viele Leute mehr als einen Mail-Account haben.

    Thread-Ersteller ostseehuepfer

    (@ostseehuepfer)

    Okay ich sollte vielleicht das gesammte Vorhaben schildern um Aufschluss zu bringen:

    Es wird an einem Tag X um eine Uhrzeit Y ein Livestreamevent geben. Hierzu werden vorab im WordPress Member Plugin Benutzer angelegt mit E-Mail Adressen (CSV Import). Diese Login Daten werden an die Zuschauer verteilt. Nach dem Tag X wird die Seite offline geschaltet. Es soll nur sicher gestellt werden, dass jeder Benutzer seine Login Daten nicht wahllos verteilen kann. Daher soll sich jeder Benutzer nicht unendlich oft anmelden können. Das Event geht ca 3 Stunden.

    Es ist eigentlich nicht unser Ziel hier, auf Zuruf Code für individuelle Wünsche zu erstellen, aber mich hat die Frage interessiert und ich habe ein wenig getüftelt, ob ich das in akzeptabler Zeit umgesetzt bekomme.

    Der Code ist eher als „Proof of Concept“ gedacht und wurde nicht ausgiebig getestet – also bitte mit entsprechender Sorgfalt (vorher Backups machen!) und auf eigene Gefahr nutzen – vor allem, wenn Benutzer gelöscht werden.

    In meinem Beispiel bin ich davon ausgegangen, dass es Benutzer mit der Benutzerrolle „Author“ gibt, die sich maximal 2 mal anmelden dürfen. Nach der dritten Anmeldung wird das Benutzerkonto ersatzlos gelöscht; die erfassten Beiträge werden keinem anderen Benutzer zugewiesen.
    Die Anzahl der Anmeldungen habe ich der Variablen $logins zugewiesen. Du kannst den Wert (2) beliebig ändern. Die Benutzerrolle wird in der Variablen $usergroup festgelegt. Wenn du ein Membership-Plugin verwendest, solltest du hier der Variablen den Slug der Benutzerrolle zuweisen, den das Plugin vorgibt.

    Umgangssprachlich ausgedrückt macht der Code folgendes:

    • Bei einem Login wird die User-ID des Benutzers ermittelt, der sich anmeldet.
    • Es wird geprüft, ob der Benutzer zur in $usergroup vorgegebenen Benutzergruppe gehört. Falls nicht, bricht das Plugin an der Stelle ab.
    • Es wird ausgelesen, ob bereits Anmeldungen als User-Metadaten login_count registriert wurden.
    • Existiert bereits ein Wert, wird er mit jeder Anmeldung um 1 erhöht. Gab es bisher noch keine Anmeldung, wird für diese Anmeldung der Wert 1 gesetzt.
    • Nur wenn der neue Wert über der Anzahl der erlaubten Anmeldeversuche $logins liegt, wird der gerade angemeldete Benutzer ersatzlos gelöscht und auf die Startseite umgeleitet. Der Code endet an der Stelle.
    • Der neue Zählerstand wird in der Datenbank als User-Metadaten login_count für den nächsten Besuch gespeichert.

    Hier nun endlich der Code:

    
    <?php
    add_action( 'wp_login', 'record_user_login', 10, 2 );
    
    function record_user_login( $user_login, $user ) {
    	// Number of allowed logins.
    	$logins = 2;
    
    	// Role, the user must belong to.
    	$usergroup = 'author'
    
    	// Get current user ID from the user object.
    	$user_id = $user->ID;
    
    	// Only run for user role "author"
    	// Use different role for membership plugins!
    	$roles = $user->roles;
    	if ( in_array( $usergroup, (array) $roles ) ) {
    
    		// Get previous login count.
    		$login_count = get_user_meta( $user_id, 'login_count', true );
    
    		// Increment login count if it exists, or set it to 1.
    		if ( intval( $login_count ) ) {
    			$new_count = $login_count + 1;
    		} else {
    			$new_count = 1;
    		}
    		if ( $new_count > $logins ) {
    			// If user logged in more than specified number of logins, *delete* user.
    			require_once ABSPATH . 'wp-admin/includes/user.php';
    			wp_delete_user( $user->ID );
    			// Send him to front page.
    			if ( wp_safe_redirect( home_url() ) ) {
    				exit;
    			}
    		}
    
    		// Update login count in user meta.
    		update_user_meta( $user_id, 'login_count', $new_count );
    
    	}
    	return;
    }
    

    Du kannst den Code entweder in einem eigenen Plugin verwenden oder, wenn dir das zuviel Aufwand ist, mit dem Plugin Code Snippets hinzufügen (ohne das <?php am Anfang).

    Es wäre schön, wenn du dich ein wenig mit dem Code auseinandersetzt, deshalb auch die umgangssprachliche Darstellung des Inhalts. Ich werden keine Änderungswünsche umsetzen – wir sind keine unbezahlten Dienstleister. Wenn du ergänzende Wünsche hast, wende dich bitte an einen Dienstleister oder probier, ob du selber zurecht kommst. Wenn es dabei dann Probleme gibt, können wir einzelne, konkrete Fragen hier behandeln.

    Nochmal der erst gemeinte Hinweis:
    Keine Gewährleistung.
    Vor Nutzung ein Backup machen.

    Verstanden habe ich das schon, daher der letzte Absatz in meinem vorherigen Posting. Allerdings befürchte ich, du wirst da ein Plugin anpassen oder ein entsprechendes Script selber schreiben müssen.

    Thread-Ersteller ostseehuepfer

    (@ostseehuepfer)

    @pixolin vielen vielen Dank für die Lösung. So viel Arbeit wollte ich eigentlich niemandem machen.

    Habe momentan folgenden Ansatz zur Lösung (werde aber deine Lösung auf jeden Fall testen!!!)

    Ich habe das membership Plugin deaktiviert. Mit dem “
    Loggedin – Limit Active Logins“ lege ich das Limit fest wie viel Logins ein User haben darf. Mit dem Plugin „Page Restrict“ schütze ich die Seite welche nicht ohne Login gesehen werden darf.
    Grüße

    Hört sich nach einer besseren Lösung für dein eigentliches Vorhaben an und zeigt wiedermal sehr schön, wieso es selten etwas bringt, mit Code (drei Stunden Arbeit) auszuhelfen. War aber interessant zu programmieren, also nicht ganz vertane Zeit.

Ansicht von 12 Antworten - 1 bis 12 (von insgesamt 12)