مهمة Rake لدمج المستخدمين

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)

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 إعجابات

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

8 إعجابات

إذن، إذا كنت تستخدم SSO في موقعك، فهل يستحيل إكمال مهمة rake merge؟ يقول الموظفون اللطيفون في Communiteq (المعروفة سابقًا باسم DiscourseHosting) إنهم يتلقون رسالة الخطأ التالية:

ActiveRecord::RecordNotSaved: فشل في حفظ البريد الإلكتروني الأساسي الجديد المرتبط
/var/www/discourse/app/services/user_merger.rb:359:in `delete_source_user'

يسبب هذا أيضًا مشاكل عند محاولة استخدام الإضافة من @Dannii، لأنه يبدو أن عمليته تحاول تنفيذ هذه الخطوة أولاً.

هل توجد حلول بديلة مقترحة لدمج المستخدمين في مواقع SSO؟ ما يحدث لدينا هو أن الشخص ينتقل من منظمة إلى أخرى، فيحصل على حساب جديد عبر عملية SSO (لديه بريد إلكتروني جديد)، ولكن نظرًا لأنه نفس الشخص، نود أن نتمكن من دمج الحسابات بمجرد استقراره في موقعه الجديد.

تعطيل SSO، ثم الدمج، ثم إعادة تمكين SSO؟

شكرًا لك، لقد جربت ذلك (تعطيل/دمج/تمكين) لكن دون جدوى. ربما يكون إعادة التشغيل مطلوبة بعد التعطيل؟ وهو ما أفترض أنه يعني أنني لن أستطيع تسجيل الدخول بعد ذلك، نظرًا لأنني أيضًا مستخدم للمصادقة الموحدة (SSO).

لا أفهم هذا. أنا أستخدم SSO عبر إضافة wp_discourse الخاصة بـ WordPress ولا أواجه أي مشكلة في تشغيل مهمة rake هذه. ثم أحذف مستخدم WordPress الذي تم دمجه.

3 إعجابات

لدي حالة محددة أحتاج فيها إلى مساعدة، تم ذكر حالة مشابهة أعلاه.

أريد دمج حسابي مستخدمين، لكن:

  • الحساب رقم 1 يحمل اسم المستخدم القديم الذي يرغب المستخدم في الاحتفاظ به.
  • الحساب رقم 2 يحتوي على البريد الإلكتروني الجديد للمستخدم. (لا يملك المستخدم الوصول إلى البريد الإلكتروني في الحساب رقم 1، لأنه حساب مؤسسي.)

هل يمكنني استخدام واجهة المستخدم “دمج” لدمج الحسابين بحيث يحتوي الحساب الناتج على اسم المستخدم القديم ولكن مع البريد الإلكتروني الجديد؟

لا أعتقد أن ذلك ممكنًا عبر لوحة الإدارة، ولكن يمكن تحقيقه بخطوة إضافية:

الدمج عبر لوحة الإدارة
تغيير البريد الإلكتروني لذلك المستخدم عبر وحدة تحكم Rails:

cd /var/discourse
./launcher enter app
rails c
UserEmail.find_by(email: "old@example.com").update(email: "new@example.com")
7 إعجابات

أثناء الدمج، تم إضافة البريد الإلكتروني الجديد كبريد إلكتروني ثانوي. لم أكن متأكدًا تمامًا من كيفية تفاعله مع حل SSO المخصص الخاص بي. لذا قمت بإزالة البريد الإلكتروني الثانوي أولاً (باتباع هذه الخطوات)، ثم اتبعت اقتراحك.

شكرًا لك @omarfilip!

7 إعجابات

لقد واجهت هذه الحالة عدة مرات. عند دمج المستخدمين، يصبح عنوان البريد الإلكتروني الأساسي للمستخدم المصدر عنوان بريد إلكتروني ثانوي للمستخدم الهدف. عند استخدام SSO وتفعيل إعداد “يتجاوز SSO البريد الإلكتروني”، قد لا يتمكن المستخدم المدمج من تسجيل الدخول ما لم يتم حذف البريد الإلكتروني الثانوي من وحدة تحكم Rails.

أتساءل عما إذا كان يجب أن تتضمن المهمة خيارًا لعدم تعيين البريد الإلكتروني الثانوي للهدف من البريد الإلكتروني الأساسي للمصدر.

10 إعجابات

أو أن يكون هناك وسيلة مريحة لتبديلهما.

9 إعجابات

أواجه هذه الرسالة خطأ، هل لديك أي فكرة؟

cd /var/discourse
./launcher enter app

توقف الأمر هنا!

إعجاب واحد (1)

صعب التحديد مع التشويش، لكن هل يمكنك التحقق مرة أخرى من وجود علامة اقتباس مفتوحة ' قبل اسم المستخدم الأول؟ يبدو أن وحدة التحكم تتوقع مدخلات إضافية (وهو ما قد يشير إلى وجود نص مفتوح).

10 إعجابات
> /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

حصلت على هذه الخطأ؟

إعجاب واحد (1)

مرحبًا.
تم العثور على خطأ بسيط بعد الدمج. يتم عرض شارة الترحيب مرتين في ملف المستخدم كما لو أنه حصل عليها مرتين لأول مرة :slight_smile:

4 إعجابات