Rake-Task zum Zusammenführen von Benutzern

If you’re using Wordpress as the authority for SSO what benefit is there to storing a second email in Discourse?

right-o. unless I store it in wordpress too for the same reasons. but I don’t know how to prevent this rake task from storing a secondary email when merging users.

If secondary emails are an issue can’t they just be removed?

1 „Gefällt mir“

Yes, that is one easy solution. Is there a rake task someone can share to list all the users with secondary emails, and to delete their secondary emails?

That said, I’d prefer to see discourse evolve to take advantage of a cool new feature like secondary emails rather than have to find ways to work around it. Other people are likely to bump up against this issue too at some point and wonder why the email address is not updating in discourse when updated in wordpress.

I don’t think there’s a rake task, but you could do it from the rails console. There should be some example queries about secondary emails for data explorer and some sample .update_all code for other rails examples. It’ll take more time than I can spare here today. If you’re stuck and want to pay, my contact info is in my profile.

See Additional email address per user account support - #34 by zogstrip

Here’s what you’re looking for: Additional email address per user account support - #34 by zogstrip

3 „Gefällt mir“

I’ve written a plugin which makes it easier to run this task:

8 „Gefällt mir“

Wenn Sie auf Ihrer Site SSO verwenden, ist es dann nicht möglich, die rake merge-Aufgabe abzuschließen? Die freundlichen Leute von Communiteq (ehemals DiscourseHosting) berichten von dieser Fehlermeldung:

ActiveRecord::RecordNotSaved: Failed to save the new associated primary_email
/var/www/discourse/app/services/user_merger.rb:359:in `delete_source_user'

Dies führt auch zu Problemen bei der Verwendung des Plugins von @Dannii, da sein Prozess anscheinend versucht, diesen Schritt zuerst auszuführen.

Gibt es empfohlene Workarounds für das Zusammenführen von Benutzern auf SSO-Sites? Bei uns kommt es vor, dass eine Person von einer Organisation zu einer anderen wechselt und daher über den SSO-Prozess ein neues Konto erhält (sie haben eine neue E-Mail-Adresse). Da es sich jedoch um dieselbe Person handelt, möchten wir die Konten zusammenführen können, sobald sie sich an ihrem neuen Standort etabliert haben.

SSO deaktivieren, zusammenführen und dann SSO wieder aktivieren?

Danke, ich habe es versucht (deaktivieren/zusammenführen/aktivieren), aber ohne Erfolg. Vielleicht ist nach dem Deaktivieren ein Neustart erforderlich? Das würde wohl bedeuten, dass ich mich nicht mehr anmelden kann, da ich auch ein SSO-Benutzer bin.

Ich verstehe das nicht. Ich verwende SSO über das WordPress-Plugin wp_discourse und habe keine Probleme, diese Rake-Aufgabe auszuführen. Anschließend lösche ich den WordPress-Benutzer, der zusammengeführt wurde.

3 „Gefällt mir“

Ich habe einen speziellen Fall, bei dem ich Hilfe brauche: ein ähnliches Beispiel wurde oben erwähnt.

Ich möchte zwei Benutzerkonten zusammenführen, aber:

  • Konto #1 hat den alten Benutzernamen, den der Benutzer behalten möchte.
  • Konto #2 hat die neue E-Mail-Adresse des Benutzers. (Der Benutzer hat keinen Zugriff auf die E-Mail in Konto #1, da es sich um ein institutionelles Konto handelt.)

Kann ich die UI-Funktion „Zusammenführen

Ich glaube nicht, dass das über das Admin-Panel möglich ist, aber es lässt sich mit einem zusätzlichen Schritt erreichen:

Über das Admin-Panel zusammenführen
E-Mail-Adresse des Benutzers über die Rails-Konsole ändern:

cd /var/discourse
./launcher enter app
rails c
UserEmail.find_by(email: "old@example.com").update(email: "new@example.com")
7 „Gefällt mir“

Während des Zusammenführungsprozesses wurde die neue E-Mail-Adresse als sekundäre E-Mail-Adresse hinzugefügt. Ich war mir nicht ganz sicher, wie dies mit meiner benutzerdefinierten SSO-Lösung interagieren würde. Daher habe ich zunächst die sekundäre E-Mail-Adresse entfernt (nach diesen Schritten hier) und dann deinen Vorschlag befolgt.

Danke @omarfilip!

7 „Gefällt mir“

Ich bin schon mehrmals auf diese Situation gestoßen. Wenn Benutzer zusammengeführt werden, wird die primäre E-Mail-Adresse des Quellbenutzers zur sekundären E-Mail-Adresse des Zielbenutzers. Wenn SSO verwendet wird und die Einstellung „sso überschreibt E-Mail“ aktiviert ist, kann es sein, dass der zusammengeführte Benutzer sich nicht anmelden kann, es sei denn, die sekundäre E-Mail-Adresse wird über die Rails-Konsole gelöscht.

Ich frage mich, ob die Aufgabe die Option haben sollte, die sekundäre E-Mail-Adresse des Ziels nicht aus der primären E-Mail-Adresse der Quelle zu setzen.

10 „Gefällt mir“

Oder eine praktische Möglichkeit, diese zu tauschen.

9 „Gefällt mir“

Ich erhalte diesen Fehler. Haben Sie eine Idee?

cd /var/discourse
./launcher enter app

Es bleibt hier hängen!

1 „Gefällt mir“

Aufgrund der Unschärfe ist es schwer zu sagen, aber kannst du bitte noch einmal prüfen, ob vor dem ersten Benutzernamen ein öffnendes Anführungszeichen ' steht? Es scheint, als erwarte die Konsole weitere Eingaben (was auf eine nicht geschlossene Zeichenkette hindeuten könnte).

10 „Gefällt mir“
> /var/www/discourse# rake users:merge['anon94132497','PavelCherenkovv'] --trace
** Invoke users:merge (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute users:merge
rake aborted!
ArgumentError: ArgumentError
/var/www/discourse/app/services/post_owner_changer.rb:12:in `initialize'
/var/www/discourse/app/services/user_merger.rb:63:in `new'
/var/www/discourse/app/services/user_merger.rb:63:in `change_post_owner'
/var/www/discourse/app/services/user_merger.rb:51:in `block in move_posts'
/var/www/discourse/app/services/user_merger.rb:49:in `each'
/var/www/discourse/app/services/user_merger.rb:49:in `move_posts'
/var/www/discourse/app/services/user_merger.rb:13:in `merge!'
/var/www/discourse/lib/tasks/users.rake:50:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:279:in `block in execute'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:279:in `each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:279:in `execute'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
/usr/local/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:199:in `invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:188:in `invoke'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:160:in `invoke_task'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:116:in `block (2 levels) in top_level'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:116:in `each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:116:in `block in top_level'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:125:in `run_with_threads'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:110:in `top_level'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:83:in `block in run'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:186:in `standard_exception_handling'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:80:in `run'
bin/rake:13:in `<top (required)>'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:63:in `load'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:63:in `kernel_load'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:28:in `run'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:476:in `exec'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor.rb:399:in `dispatch'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:30:in `dispatch'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/base.rb:476:in `start'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:24:in `start'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/exe/bundle:46:in `block in <top (required)>'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/friendly_errors.rb:123:in `with_friendly_errors'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/exe/bundle:34:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Tasks: TOP => users:merge

Ich habe diesen Fehler bekommen?

1 „Gefällt mir“

Hallo.
Nach einem Merge wurde ein kleiner Fehler festgestellt. Das „Willkommen“-Abzeichen wird im Benutzerprofil zweimal angezeigt, als hätte der Benutzer es zum ersten Mal zweimal erhalten :slight_smile:

4 „Gefällt mir“