Task Rake per unire utenti

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 Mi Piace

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 Mi Piace

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

8 Mi Piace

Quindi, se stai utilizzando SSO sul tuo sito, non è possibile completare l’attività rake merge? Le persone gentili di Communiteq (in precedenza DiscourseHosting) riportano questo messaggio di errore:

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

Ciò causa anche problemi quando si tenta di utilizzare il plugin di @Dannii, poiché sembra che il suo processo tenti di eseguire questo passaggio per primo.

Ci sono suggeriti dei workaround per l’unione degli utenti sui siti SSO? Ciò che succede è che una persona passa da un’organizzazione all’altra e quindi ottiene un nuovo account tramite il processo SSO (ha una nuova email), ma dato che si tratta della stessa persona, vorremmo poter unire gli account una volta che si sono stabiliti nella nuova sede.

Disabilita SSO, unisci, quindi riabilita SSO?

Grazie, ci ho provato (disabilita/unisci/riabilita), ma senza successo. Forse dopo la disabilitazione è necessario un riavvio? Immagino che ciò significherebbe non poter più accedere, dato che sono anche un utente SSO.

Non capisco. Uso SSO tramite il plugin WordPress wp_discourse e non ho problemi nell’eseguire questo task rake. In seguito elimino l’utente WordPress che è stato unito.

3 Mi Piace

Ho un caso specifico per cui ho bisogno di aiuto, simile a quello menzionato sopra.

Voglio unire due account utente, ma:

  • L’Account #1 ha il vecchio nome utente che l’utente vorrebbe mantenere.
  • L’Account #2 ha il nuovo indirizzo email dell’utente. (L’utente non ha accesso all’email dell’Account #1, poiché si tratta di un account istituzionale.)

Posso utilizzare l’interfaccia “Unisci” per combinare i due account in modo che l’account risultante abbia il vecchio nome utente ma il nuovo indirizzo email?

Non credo che sia fattibile tramite l’Admin, ma può essere realizzato con un passaggio aggiuntivo:

Fusionare tramite Admin
Modificare l’email per quell’utente tramite la console rails:

cd /var/discourse
./launcher enter app
rails c
UserEmail.find_by(email: "old@example.com").update(email: "new@example.com")
7 Mi Piace

Durante l’unione, il nuovo indirizzo email è stato aggiunto come Email Secondaria. Non ero sicuro di come questo potesse interagire con la mia soluzione SSO personalizzata. Quindi ho prima rimosso l’email secondaria (seguendo queste istruzioni), e poi ho seguito il tuo suggerimento.

Grazie @omarfilip!

7 Mi Piace

Mi sono imbattuto in questa situazione diverse volte. Quando gli utenti vengono fusi, l’indirizzo email principale dell’utente sorgente diventa l’indirizzo email secondario dell’utente di destinazione. Quando viene utilizzato SSO e l’impostazione sso overrides email è abilitata, l’utente fuso potrebbe non essere in grado di accedere a meno che l’indirizzo email secondario non venga eliminato dalla console di Rails.

Mi chiedo se l’attività dovrebbe avere un’opzione per non impostare l’email secondaria di destinazione partendo dall’email principale della sorgente.

10 Mi Piace

Oppure per avere un modo comodo per scambiarle.

9 Mi Piace

Sto ricevendo questo errore, hai qualche idea?

cd /var/discourse
./launcher enter app

È bloccato qui!

1 Mi Piace

È difficile dirlo con la sfocatura, ma puoi verificare se c’è un apice di apertura ' prima del primo nome utente? Sembra che la console si aspetti un’ulteriore input (il che potrebbe indicare una stringa aperta)

10 Mi Piace
> /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

Ho ricevuto questo errore?

1 Mi Piace

Ciao.
Ho individuato un piccolo bug dopo un merge. Il badge Benvenuto viene visualizzato due volte nel profilo dell’utente, come se l’avesse ottenuto due volte per la prima volta :slight_smile:

4 Mi Piace