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?
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
I’ve written a plugin which makes it easier to run this task:
즉, 사이트에서 SSO를 사용 중이라면 rake merge 작업을 완료할 수 없는 것인가요? Communiteq(구 DiscourseHosting)의 담당자분들은 다음과 같은 오류 메시지를 받는다고 합니다:
ActiveRecord::RecordNotSaved: Failed to save the new associated primary_email
/var/www/discourse/app/services/user_merger.rb:359:in `delete_source_user'
이 문제는 @Dannii 님의 플러그인을 사용할 때도 발생하는데, 해당 플러그인의 처리 과정이 이 단계를 먼저 수행하려는 것으로 보이기 때문입니다.
SSO 사이트를 위한 사용자 병합에 대한 우회 방안이 있을까요? 저희가 겪는 상황은 다음과 같습니다. 사용자가 한 조직에서 다른 조직으로 이직하면서 SSO 프로세스를 통해 새로운 계정을 받게 됩니다(이메일 주소가 변경됨). 하지만 같은 사람이므로, 새 조직에 정착한 후에 계정을 병합할 수 있기를 원합니다.
SSO를 비활성화한 후 병합을 수행하고, 다시 SSO를 활성화해야 하나요?
감사합니다. 말씀하신 대로 (비활성화/병합/활성화) 시도해 봤는데 안 됐어요. 비활성화 후 재시작이 필요한 걸까요? SSO 사용자이기도 해서 재시작하면 더 이상 로그인할 수 없게 되는 거겠죠?
이해가 안 됩니다. 저는 wp_discourse Wordpress 플러그인을 사용해 SSO를 사용하고 있으며, 이 rake 작업을 실행하는 데 문제가 없습니다. 그 후 병합된 Wordpress 사용자를 삭제합니다.
특정 사례에 대해 도움이 필요합니다. 위에서 언급된 유사한 사례와 비슷합니다.
두 사용자 계정을 병합하려고 하는데:
- 계정 #1에는 사용자가 유지하고 싶은 기존 사용자 이름이 있습니다.
- 계정 #2에는 사용자의 새 이메일 주소가 있습니다. (사용자는 기관용 계정인 계정 #1의 이메일에 접근할 수 없습니다.)
“병합” UI를 사용하여 두 계정을 결합할 수 있으며, 결과 계정에 기존 사용자 이름은 유지하되 새 이메일 주소가 적용되도록 할 수 있을까요?
관리자 화면에서는 불가능할 것 같습니다. 하지만 추가 단계를 통해 가능합니다:
관리자 화면에서 병합
Rails 콘솔을 통해 해당 사용자의 이메일을 변경:
cd /var/discourse
./launcher enter app
rails c
UserEmail.find_by(email: "old@example.com").update(email: "new@example.com")
병합 과정에서 새 이메일이 보조 이메일(Secondary Email)로 추가되었습니다. 이것이 제 커스텀 SSO 솔루션과 어떻게 상호작용할지 정확히 알 수 없어서, 먼저 보조 이메일을 제거했습니다(이 단계를 따름). 그 후 여러분의 제안을 따랐습니다.
@omarfilip님 감사합니다!
저는 이 상황을 여러 번 겪었습니다. 사용자가 병합되면, 소스 사용자의 기본 이메일 주소가 대상 사용자의 부 이메일 주소가 됩니다. SSO가 사용 중이고 sso overrides email 설정이 활성화되어 있는 경우, 부 이메일을 Rails 콘솔에서 삭제하지 않는 한 병합된 사용자가 로그인하지 못할 수 있습니다.
작업(task)에 소스의 기본 이메일을 대상으로 부 이메일로 설정하지 않는 옵션이 있어야 하는지 궁금합니다.
또는 둘을 쉽게 교체할 수 있는 방법이 있으면 좋겠습니다.
흐림 때문에 정확히 판단하기 어렵지만, 첫 번째 사용자 이름 앞에 열린 따옴표 '가 있는지 한 번 더 확인해 주시겠어요? 콘솔이 추가 입력을 기다리고 있는 것처럼 보이는데, 이는 열린 문자열이 있음을 의미할 수 있습니다.
> /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
이 오류가 발생했습니다.
안녕하세요.
병합 후 사소한 버그를 발견했습니다. 사용자 프로필에 ‘환영’ 배지가 두 번 표시됩니다. 마치 처음 받을 때 두 번 받은 것처럼 말이죠 ![]()
