قائمة المستخدمين عبر API باستخدام مفتاح API الخاص بالموظفين لا تعرض عناوين البريد الإلكتروني

مواصلة النقاش من الحصول على بريد المستخدم، يبدو أن emails.json لا يعمل:

توضح وثائق واجهة برمجة التطبيقات الخاصة بـ قائمة المستخدمين أن استجابة JSON الناتجة توفر حقل email. ويشير النقاش أعلاه إلى ما يلي:

باستخدام مفتاح واجهة برمجة تطبيقات خاص بالموظفين، عند استدعاء client.list_users('staff')، أحصل على قائمة بالمستخدمين، لكن حقل البريد الإلكتروني يظهر فقط في إدخالي أنا. كنت أتوقع أن يُعاد حقل البريد الإلكتروني لجميع المستخدمين في القائمة. وإلا، فسأضطر إلى استدعاء الواجهة مرة أخرى لكل مستخدم لاسترداد البريد الإلكتروني.

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

بشكل عام، أعتقد أن عناوين البريد الإلكتروني يجب أن تكون متاحة إما بشكل واضح للموظفين، أو كمسار تجزئة SHA256، ربما مع بعض الملح (salt) الذي يمنع المهاجمين التعسفيين من اكتشاف ما إذا كان البريد الإلكتروني مستخدمًا في هذا الموقع — رغم أن لديهم طرقًا أخرى للقيام بذلك، مثل تذكير بكلمة المرور أو التسجيل. سيسمح استخدام تجزئة تشفير للبريد الإلكتروني بالتحقق من وجوده دون الكشف عنه.

على أي حال، أعتقد أن عدم وجود قيمة البريد الإلكتروني في قائمة المستخدمين باستخدام مفتاح واجهة برمجة تطبيقات خاص بالموظفين هو خطأ ويجب إصلاحه.

وفي الوقت نفسه، بمجرد الحصول على قائمة المستخدمين، يجب عليك التكرار فيها واستدعاء /u/#{username}/emails.json لحقن البريد الإلكتروني المفقود في القائمة.


إليك بعض الكود:

module DiscourseApi::API::Users
  def user_email(username)
    response = get("/u/#{username}/emails.json")
    response.body['email']
  end
end

staff = client.list_users('staff')
staff.each_with_index do |u, i|
  next unless u['email'].nil?
  staff[i]['email'] = client.user_email(u['username'])
end

staff.sample['email'].nil? # => false

جرب استخدام client.list_users('staff', show_emails: true)

لاحظ أن الوصول إلى هذه المعلومات سيظهر في سجل الموظفين في لوحة المسؤول.