Benutzer im Rails-Console löschen

Wir nutzen SSO, um Benutzer anzumelden, die auf unserer Hauptwebsite authentifiziert wurden.

Einer unserer Benutzer erhielt bei der Anmeldung eine Fehlermeldung und wurde gebeten, einen Administrator zu kontaktieren. Wir suchten nach ihr, konnten ihr Profil jedoch nicht finden.

Ich tat das Erste, was mir einfiel, und „löschte

Sie sollten UserDestroyer verwenden, um einen Benutzer ordnungsgemäß zu löschen. Etwas wie das hier sollte funktionieren:

UserDestroyer.new(Discourse.system_user).destroy(User.find_by_username_or_email("ex@example.com"), delete_posts: false)

Dadurch wird der Systembenutzer den Benutzer mit der E-Mail-Adresse ex@example.com löschen. Sie können auch einen Benutzernamen anstelle der E-Mail-Adresse angeben.

Wenn Sie in den Logs nachvollziehen möchten, wer den Benutzer gelöscht hat, ersetzen Sie Discourse.system_user durch User.find_by_username_or_email("admin@example.com"), wobei admin@example.com die E-Mail-Adresse eines Site-Administrators ist.

Hallo Joshua und vielen Dank für deine schnelle Antwort.

Leider ist dabei ein Fehler aufgetreten:

UserDestroyer::PostsExistError: UserDestroyer::PostsExistError
from /var/www/discourse/app/services/user_destroyer.rb:18:in `destroy'

Hinweis: Ich habe den Benutzernamen anstelle der E-Mail-Adresse verwendet, um den Benutzer zu finden, da die E-Mail von mir versehentlich gelöscht wurde.

OK, das bedeutet, dass der Benutzer, den Sie löschen möchten, Beiträge hat: PostsExistError.

Die empfohlene Lösung besteht darin, die Beiträge des Benutzers zu überprüfen und sie einzeln zu löschen, falls es welche gibt, die Sie behalten möchten, indem Sie den Benutzer ändern. Denken Sie daran, dass das Löschen des ersten Beitrags in einem Thema auch das Thema löscht.

Die Methode „einfach machen

Ich sehe diesen Fehler. Ich habe den Benutzer über den Benutzernamen gefunden. (Aus irgendeinem Grund kann die E-Mail-Adresse nicht verwendet werden)

Discourse::InvalidAccess: can_delete_user? fehlgeschlagen
from /var/www/discourse/lib/guardian/ensure_magic.rb:11:in `method_missing'

Der Befehl

UserDestroyer.new(Discourse.system_user).destroy(User.find_by(username: "someuserwhocertainlyexists"), delete_posts: true)

Ich habe denselben Fehler festgestellt:

UndefinedColumn: ERROR:  column users.email does not exist
LINE 1: SELECT "users".* FROM "users" WHERE "users"."email" = 'test'...

Ich denke, jomaxros Antwort könnte mit einem funktionierenden Beispiel aktualisiert werden. :slight_smile:
Außerdem, wie lautet der Befehl, um einen Benutzer über seine E-Mail-Adresse zu löschen?

Entschuldigung für die Verzögerung, behoben.

Hallo, ich habe denselben Fehler:

Discourse::InvalidAccess: can_delete_user? failed
from /var/www/discourse/lib/guardian/ensure_magic.rb:11:in `method_missing'

Hast du eine Idee?

Hallo, hat niemand eine Lösung? Es scheint nur beim Löschen bestimmter Konten aufzutreten, nicht bei anderen, und ich kann nicht herausfinden, warum.

Beispiel für meine laufende Schleife:

2821 : Gurpreet
2969 : GUY26
3012 : dboy3587
3015 : devilsports
3020 : jimyyyy
3029 : vdubgrub
3071 : Frank1
3126 : volgano
3172 : dawei
3307 : almolatham
3320 : embsoft
3352 : auto
3379 : sulemaninc
3447 : Baton
3463 : galvin
3465 : autopartchina
3497 : tracker
Discourse::InvalidAccess: can_delete_user? fehlgeschlagen
from /var/www/discourse/lib/guardian/ensure_magic.rb:11:in `method_missing'

Alle Benutzer wurden gelöscht, außer dem letzten. Wenn ich diesen überspringe, werden die nächsten Benutzer gelöscht, bis aus einem unbekannten Grund ein weiterer Benutzer nicht gelöscht werden kann.

Edit: Ich musste diese Einstellungen ändern:
delete all post max
delete_user_max_post_age
:+1:t6:

Sie können Admin-Benutzer mit diesem Befehl wohl nicht löschen? :thinking:

Richtig. Benutzer mit Staff-Rechten können nicht gelöscht werden. Um den Benutzer zu löschen, müssen Sie ihm zunächst den Admin-Zugang entziehen.

u = User.find_by_username_or_email("ex@example.com")
u.admin = false
u.moderator = false
u.save
UserDestroyer.new(Discourse.system_user).destroy(u, delete_posts: false)

Danke: delete_user_max_post_age hilft mir, meine alte Datenbank (mehr als 20 Jahre) zu bereinigen