هل يمكن إرسال رابط تسجيل الدخول عبر البريد الإلكتروني عبر API؟

مرحبًا! أنا أستمتع حقًا باستخدام واجهة برمجة تطبيقات Discourse!

بعد اتباع الدليل حول هندسة الواجهة العكسية للـ API، واجهت مشكلة في جعل الواجهة ترسل رابط تسجيل دخول.

خلفية عن سبب قيامي بذلك
لقد أنشأت خدمة SSO لمختبر اختراقات محلي (hackerspace) بحيث يتمكن المستخدمون من تسجيل الدخول إلى Discourse الخاص بنا عبر نظام عضوية المختبر.

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

الهدف
أود إرسال رابط تسجيل دخول إلى مستخدم @ domain .co.uk عبر الواجهة.

لقد جربت ما يلي:

curl -X POST "https://discourse.<site>.org.uk/u/email-login" --data "{\"login\":\"user"%\"40domain.co.uk\"}" -H "Api-Key: xxxxx" -H "Api-Username: system" -H "Content-Type: application/json"

والنتيجة التي حصلت عليها هي:

<html><body>أنت يتم <a href="https://discourse.<site>.org.uk/">إعادة توجيهك</a>.</body></html>

إذا لم أقم بتضمين مفتاح الواجهة، أحصل على [BAD CSRF].

إذن، ما الذي أعلق فيه هو: كيف يمكنني جعل Discourse يرسل رابط تسجيل دخول عبر البريد الإلكتروني إلى مستخدم @ domain .co.uk عبر الواجهة؟

شكرًا جزيلًا لأي مساعدة، سأواصل تجربة أشياء مختلفة لأرى ما ينجح.


ملاحظة: لا أود الاضطرار إلى استخدام حيلة مثل:
إرسال طلب إلى /session/csrf وحفظ رمز CSRF
ثم إرسال طلب إلى /u/email-login باستخدام رمز CSRF.

هل من الممكن القيام بذلك باستخدام مفتاح الواجهة فقط؟

شكرًا!
:slight_smile:

فقط للمتابعة، هل استخدام مسار CSRF متبوعًا بمسار رابط البريد الإلكتروني هو الطريقة الصحيحة للقيام بذلك؟

هل لا يوجد تنفيذ لهذا في الـ API عند توفير مفتاح API؟

كيف يتفاعل نظام الدخول الموحد (SSO) الخاص بكم مع Discourse؟ إذا كنتم تستخدمون DiscourseConnect، فغالبًا ما يكون نقطة النهاية /u/email-login معطلة.

شكرًا على ردك. نعم، يتم استخدام Discourse Connect.

رأيتُ ذلك أيضًا، لذا قمتُ بتعطيل Discourse Connect وحاولتُ الحصول على رابط تسجيل دخول، لكنني لم أستطع جعله يعمل، وهذا ما أدى إلى ظهور المخرجات في منشوري أعلاه.

إذا كان الحصول على رابط عبر البريد الإلكتروني معطلاً عند تفعيل Discourse Connect، فستكون عليّ إعادة التفكير في نهجي لكيفية ربط الحسابات من خدمة SSO لنظام العضوية بـ Discourse.

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

  1. مطابقة المستخدمين باستخدام معرّف فريد آخر. يمكنك إنشاء روابط DiscourseConnect مسبقًا لمستخدم ما عبر وحدة التحكم. لن تعمل هذه الطريقة إلا إذا كان لديك معرّف آخر ثابت بين Discourse ومزود الهوية.

  2. (الأكثر شيوعًا) السماح للمستخدمين بإنشاء حسابات جديدة، ثم طلب منهم مراسلة أحد المشرفين وطلب “دمج” الحساب الجديد في الحساب القديم (باستخدام الزر الموجود في أسفل صفحة إدارة المستخدم). ستقوم هذه العملية تلقائيًا بمطابقة عناوين البريد الإلكتروني وإنشاء ارتباط DiscourseConnect.

شكرًا لك على ردك.

من المرجح أن أختار نهج دمج الحسابات.

سيكون من الرائع أن تكون هذه العملية ذاتية الخدمة - ربما من خلال واجهة برمجة تطبيقات (API) حيث يمكن للمستخدمين تسجيل دخولهم عبر رابط بريد إلكتروني، ومن ثم تحديث بريدهم الإلكتروني لمزامنة الحسابين.
أو ربما من خلال السماح للمستخدم بتوثيق هويته عن طريق تقديم بريد إلكتروني وكلمة مرور Discourse الخاصة به، إلى جانب عنوان بريد إلكتروني محدث.

شكرًا مجددًا على وقتك.