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“

So, if you’re using SSO on your site is it not possible to complete the rake merge task? The fine folks over at Communiteq (formerly DiscourseHosting) say they get this error message:

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

This also causes issues when trying to use the plugin from @Dannii because it looks like his process is trying to do this step first.

Any suggested workarounds for merging users for SSO sites? What we have happen is that a person changes from one organization to another and so they get a new account through the SSO process (they have a new email), but since it is the same person, we’d like to be able to merge the accounts once they’ve established themselves at their new location.

Disable SSO, merge, then re-enable SSO?

Thanks, I gave it a shot (disable/merge/enable) but no luck. Maybe after disabling a restart is required? Which I’m assuming would mean I couldn’t login any longer since I’m an SSO user too.

I don’t get this. I use sso using the wp_discourse Wordpress plugin and have no problem running this rake task. I then delete the Wordpress user that got merged.

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“