Wie lösche ich "blockierte" Benutzer in großen Mengen?

7

Es gibt einen oder mehrere Spammer, die ständig Konten auf meiner Website erstellen. Die Konten sind standardmäßig "gesperrt", sodass sie kein Problem darstellen und der Spammer nichts von ihnen erhält.

Trotzdem möchte ich sie alle löschen, ohne 150 Mal auf die Seite / admin / people klicken zu müssen: 50 Konten gleichzeitig kündigen.

Gibt es eine Möglichkeit, alle "gesperrten" Konten in einem Schritt zu kündigen?

Drush scheint mich nur einen nach dem anderen abbrechen zu lassen ...

Jose M Vidal
quelle
Sie könnten dies leicht mit einer MySQL-Abfrage tun ... möchten Sie diesen Weg aber nicht gehen?
Kevindeleon
Einige gute Antworten hier. Um vorbeugende Maßnahmen zur Reduzierung von Spammern zu ergreifen, sollten Sie das Modul " Sind Sie ein Mensch" in Betracht ziehen. Bei der Anmeldung spielen Benutzer ein Spiel. Dies funktioniert auch auf Mobilgeräten. Dann gibt es das übliche Captcha-Angebot und Mollom. Hoffe das hilft!
Therobyouknow
Ich implementiere endlich ein benutzerdefiniertes Modul für Drupal 7. Im Bereich Admin / People gibt es ein neues Formular, um diesen Vorgang abzuschließen. Auch mit Drush. Weitere Anweisungen hier. Link zum Projekt. Link zu Themen. Bitte folgen Sie diesem Thema auf drupal.org für Probleme oder andere Fragen. Thks.
lgrtm
Ihr Modul hat anscheinend das gleiche Problem wie die akzeptierte Antwort. Sie löschen lediglich die Zeilen in der Datenbank, ohne dem Hook user_delete die Möglichkeit zu geben, ausgeführt zu werden.
David L
Unter dem Link zum Löschen des Spam-Benutzers. turnkeylinux.org/blog/deleting-drupal-zombies Im obigen Link wird der Code bereitgestellt und dieser Code wird als Spam-Benutzerregister entfernt. Dieser Code wird jedoch basierend auf dem Tag entfernt, an dem die Website gehackt wurde. Sie geben Tage an. Ex 7 Tage, um Mittel zu nennen in der einen Woche, die alle blockierten Benutzer entfernt werden
Balachandran

Antworten:

12

Auf der Leute - Seite ( admin / Personen ), zuerst die blockierten Benutzer auswählen und dann aus der Update - Optionen wählen Sie die ausgewählten Benutzerkonten Abbrechen . (Drupal 7)

Eine andere Möglichkeit ist die Verwendung des Views Bulk Operations- Moduls.

Hamid Nikmehr
quelle
3
Wie ist das die akzeptierte Antwort? Fordert das OP nicht ausdrücklich an, dass die blockierten Benutzer 50 nicht gleichzeitig mit den Kontrollkästchen auf der Seite admin / people ausgewählt werden sollen?
Squarecandy
2

Das Löschen von Benutzern direkt aus der Datenbank ist keine gute Idee. Entweder durch Drush oder durch direkte Interaktion mit der Datenbank über SQL DELETE. Einige Module erstellen beispielsweise Roboterbenutzer, und diese neigen dazu, blockiert zu werden. Das bloße Löschen kann den Betrieb des Moduls beeinträchtigen und sogar zum Ausfall des Moduls führen, sodass verwaiste Daten und unerklärliche Fehlermeldungen zurückbleiben.

Wenn Spam - Registrierungen als „blockiert“ Benutzer erscheinen, sind sie blockiert , weil ihre Konten bleiben ungeprüfte (Spammer in der Regel sicher , nie, so dass ihre Konten nie aus dem gesperrten Status Fortschritt).

Ein Projekt mit dem Namen LoginToboggan bietet Ihnen die Möglichkeit, nicht validierte Benutzer in einem vordefinierten Intervall aus dem System zu entfernen. Dies wird sich auch um alle Spammer kümmern, die sich in Zukunft registrieren, ohne dass Schutzmaßnahmen wie CAPTCHA eingeführt werden müssen, die legitime Benutzer davon abhalten, sich anzumelden .

Die Verwendung von LoginToboggan zum Entfernen von Spam-Benutzern in großen Mengen ist viel sicherer und robuster als das Hacken der Datenbank selbst.

Wenn Sie dazu kein Modul installieren möchten, können Sie alternativ die nicht verifizierten Benutzer mit drush und löschen user_delete().

Freie Radikale
quelle
+1 für LoginToboggan. / admin / config / system / logintoboggan - setze "Nicht validierte Benutzer nach löschen" auf "1 Tag". Checken Sie morgen wieder ein!
Squarecandy
2

Für Drupal 8 mit Drush unter Linux (mit Bash) können Sie folgende Lösung verwenden:

    echo 'select name from users_field_data where status=0 and uid!=0' | mysql --silent drupaldatabase > userlist
    for username in `cat userlist`; do drush user-cancel $username -y; done

Dies ist sowohl ziemlich langsam (1 Benutzer / e) als auch sicher. Es funktioniert nicht mit speziellen UTF-8-Zeichennamen und Namen mit Leerzeichen.

Schlauberg
quelle
echo 'select name from users_field_data where status=0 and uid!=0' | psql service=pg_drupal -t > userlistwenn Sie PostgreSQL verwenden.
Jgrocha
2

Dies ist, was ich getan habe, ohne zusätzliche Module hinzuzufügen oder ausgefallene Skripte oder Bash-Befehle zu entwickeln. Offensichtlich werde ich dafür eine Menge Hass bekommen, da es darum geht, den Kern vorübergehend zu hacken .

Aber das ist der SCHNELLSTE Weg. Zeitraum.

  • Bearbeiten Sie die Datei /modules/user/user.admin.inc
  • Suche nach Limit und ändere die 50 auf eine hohe Zahl
  • Gehen Sie zu Ihrer Site und Benutzeradministrationsseite / admin / people
  • Filter durch blockiert
  • löschen....
  • Schalten Sie die Limit-Nummer wieder auf 50, weil die Drupal-Götter es nicht mögen werden.

Keine Sorge, keine Drupal-Haken zu haben. Wenn Sie die Grenzwertzahl auf hoch setzen, kann Ihr SQL Server natürlich abstürzen. Stellen Sie es also entsprechend ein. Ich hatte 10.000 blockierte Benutzer zum Löschen. Ich habe es auf 5000 gesetzt und musste nur Benutzer nur auf 2 Seiten löschen.

Patoshi パ ト シ
quelle
Dies ist die sauberste Antwort hier. Es ist schnell und eine gültige Drupal-Entfernung. Keine SQL-Befehle, keine zusätzlichen Module.
Matt Coady
0

Wenn Sie sicher sind, dass alle gesperrten Konten entfernt werden müssen, können Sie eine Abfrage in phpmyadmin (oder einem MySQL-Administrator Ihrer Wahl) ausführen:

DELETE FROM users WHERE `status` = 0 AND `uid` != 0;

Das sollte alle gesperrten Konten beseitigen und den anonymen Benutzer verlassen. Natürlich möchten Sie auf jeden Fall zuerst Ihre Datenbank sichern. Beachten Sie auch, dass dadurch auch alle Konten entfernt werden, die möglicherweise legitim sind, für die Sie jedoch aus irgendeinem Grund den Status "blockiert" festgelegt haben.

Hinweis: Ich sollte sagen, dass ich viel mehr über 6 als 7 weiß. Wenn sich die Benutzertabelle in Drupal 7 drastisch unterscheidet, ist dies möglicherweise falsch.

Kevindeleon
quelle
Ja, ich bin am 7. Und ja, ich werde dies zuerst auf unserer Testversion der Website versuchen.
Jose M Vidal
7
Dies gibt keinen Modulen, die hook_user_delete (oder hook_user ("delete") in Drupal 6) implementieren, eine Chance zum Ausführen. Sie könnten Probleme und / oder verwaiste Daten in Ihrer Datenbank haben, wenn Sie dies über direktes SQL tun.
mpdonadio
1
@MPD ist korrekt. Aus diesem Grund habe ich jedoch sichergestellt, dass alle "blockierten" Konten tatsächlich SPAM-Konten sind, bevor Sie dies ausführen. Wenn es sich um neue Konten handelt, die sich noch nie angemeldet haben oder nichts ausführen, sollte dies in Ordnung sein ... aber ... deshalb habe ich gesagt, dass Sie zuerst ein Backup erstellen. Es ist nicht der beste Weg, dies zu tun. Sie können ein benutzerdefiniertes Modul schreiben, das alle blockierten Konten entfernt, die Drupal-Hooks implementieren. Das wäre wahrscheinlich sauberer, aber das ist ein schneller, schmutziger Weg.
Kevindeleon
4
Selbst wenn es sich um ein Spam-Konto handelt, besteht die Möglichkeit, dass andere Module bei der Erstellung von Konten Vorgänge ausgeführt haben. Beispielsweise erstellen das Profilmodul (und die Nachfolger) beim Erstellen des Kontos einen oder mehrere Knoten für jeden Benutzer. Diese würden in der DB bleiben.
mpdonadio
Erwischt. Gute Argumente.
Kevindeleon
0

Dies ist meine späte Party-Lösung, wie man dies erledigt, ohne vbo hinzufügen zu müssen. Der Befehl selbst ist wahrscheinlich etwas zerbrechlich und kann unter bestimmten Konfigurationen von MySQL beschädigt werden, aber das Löschen selbst sollte sicher sein.

drush sqlq "SELECT uid FROM users WHERE uid >= 629" | grep -v uid|tr '\n' ','|awk '{print "drush ev \"user_delete_multiple(array("$1"))\""}'|sh

Für Knoten können Sie entsprechend ändern

drush sqlq "SELECT nid FROM node WHERE nid >= 435193 AND type='school'" | grep -v nid|tr '\n' ','|awk '{print "drush ev \"node_delete_multiple(array("$1"))\""}'|sh

Beachten Sie, dass Sie nid / uid im grep-Bereich zusammen mit dem Funktionsaufruf ändern müssen, um die uid / nid-Werte entsprechend abzurufen.

Lexikant
quelle
0

In Drupal 8 müssen Sie Inhalte für 3 Tabellen löschen.

  • Erstellen Sie zuerst eine Kopie Ihrer Datenbank
    • Gehen Sie jetzt zu Ihrer phpMyadmin-Konsole und wählen Sie Ihre Datenbank aus
    • Durchsuchen Sie Ihre Tabelle user_field_data, um den UIDS-Bereich anzuzeigen, den Sie löschen möchten. Normalerweise sind UIDs mit geringer Anzahl Ihre echten Benutzer.
    • Löschen Sie jetzt die Daten für blockierte Benutzer. In meinem Fall sind alle Benutzer mit UID> 240 blockiert
    • Verwenden Sie diese SQL-Befehle - ändern Sie die UID-Nummer für Ihren Fall. DELETE FROM users_field_dataWHERE uid> = 240
      DELETE FROM users_data WHERE uid> = 240 DELETE FROM usersWHERE uid> = 240
Mario Cantor
quelle