Change user's email without verification

Maybe I’m missing something obvious, but I cannot find it. As an admin, can I change someone’s email address without them having to verify it?

Off-hand, I’d guess something like this would work:

cd /var/discourse
./launcher enter app
rails c
User.find_by(email: "chowder@mmmm.fooo").update(email: "bisque@soup.mmmm")
exit
exit

That’s console access, obviously.

I vaguely recall another topic here about this exact situation; try some searches.

Try this, the verification mail goes out, but they don’t have to respond to it:

Too late for me to edit that now, but it should be deactivate, change, reactivate iirc.

No problem I made it a wiki.

I am a new discourse user and I ran into the same issue. When I try the same approach (deactivate the user, update the email address, and then activate the user) it sending an email to confirm and it is only updating the email address after clicking the confirm email link. Is there a way to avoid this? I am using the API to do all the three actions.

There has been a change in the way emails are stored in the database.

The following commands should work:

cd /var/discourse
sudo ./launcher enter app
rails c

UserEmail.find_by(email: "oid@example.com").update(email: "new@example.com")

This will work fine but I am trying to do this via API as I will have to update multiple email addresses on a daily basis. Is it possible to do this via API?

نعم، سحر التنشئة الهائل، لكنني أعاني من مشكلة مماثلة، وبما أن البحث قادني إلى هنا، فقد يكون من المناسب تحديث الأوامر بناءً على هذه التجربة.

وضعي كالتالي:

  • حاول بعض مستخدمِي تغيير بريدهم الإلكتروني الرئيسي.
  • يدّعون أن الأمر لم ينجح. فقد تلقوا رسالة بريد إلكتروني للتأكيد، لكن عند النقر على الرابط، تظهر دائمًا رسالة “منتهية الصلاحية/لا تعمل”.
  • أذهب بصفتي مديرًا لتغيير ذلك البريد الإلكتروني عبر تعديل ملفهم الشخصي.
  • الآن، أصبح البريد الإلكتروني الرئيسي في حالة “بانتظار التأكيد/التحقق”.
  • لا يتلقى المستخدمون أي رسالة بريد إلكتروني للتأكيد.
  • بغض النظر عن عدد المرات التي أضغط فيها على خيار “إعادة إرسال بريد التحقق/التأكيد” في ملفهم الشخصي، لا يتم الإرسال (تم التحقق من قسم الإدارة/البريد الإلكتروني، ولا توجد رسائل صادرة لذلك. وبشكل مفارق، إذا نقرت لإرسال “بريد إعادة تعيين كلمة المرور”، فإن ذلك البريد **يُرسَل فعليًا").

المشكلة هي أنه إذا قام أي من هؤلاء المستخدمين بمسح ملفات تعريف الارتباط وغيرها، فلن يتمكنوا من الدخول إلى حساباتهم مرة أخرى (وهذا يحدث بالفعل الآن). لذا، جربت ما يلي:

لكنني أحصل على NoMethodError: undefined method `update' for nil:NilClass. إذن ربما تغيرت الحقول مرة أخرى خلال العامين الماضيين؟ :stuck_out_tongue:

أي مساعدة مرحب بها.

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

إذن، تسليم البريد الإلكتروني يعمل بشكل صحيح، ربما يكون وقت الخادم غير مضبوط أو غير صحيح؟ إذا كان وقت الخادم غير مضبوط، فقد يحدث هذا.

لقد نجح الأمر معي! إذا كنت لا تزال تواجه هذه المشكلة (أو لأي شخص آخر يجد هذا الموضوع :sweat_smile:)، أعتقد أنك ستحصل على هذه الأخطاء إذا لم يُرجع UserEmail.find_by(email: "oid@example.com") أي شيء. قد يكون من الجيد التحقق مرة أخرى مما إذا كان عنوان البريد الإلكتروني مطابقًا تمامًا.