خلل في API: النقطة الأخيرة في اسم المستخدم تسبب خطأ

نحن نستخدم واجهة برمجة التطبيقات (API) لدمج Discourse في موقعنا (عبر pydiscourse).

عندما يحين وقت إضافة مستخدم إلى مجموعة Discourse عبر واجهة برمجة التطبيقات (API)، يستخدم pydiscourse طريقة PUT إلى عنوان URL لواجهة برمجة التطبيقات Discourse:

/admin/groups/{group_id}/members.json

… ويمرر اسم المستخدم عبر المتغير ‘usernames’.

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

لقد قدمت معلمات غير صالحة للطلب: usernames
إعجاب واحد (1)

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

4 إعجابات

شكراً على الرد السريع يا جاي. هل تعرف بشكل مباشر ما إذا كان يمكن إرسال البريد الإلكتروني للمستخدم مقابل ‘اسم المستخدم’ في نقطة نهاية واجهة برمجة التطبيقات تلك، بحيث تعرف Discourse البحث عن المستخدم حسب البريد الإلكتروني؟ (نحن نستخدم تسجيل الدخول الأحادي لربط تطبيق Django الخاص بنا بـ Discourse، لذلك يجب أن يكون لدى Discourse كلا المعرفين لكل مستخدم)

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

أوه! نعم، أعرف. لاحظت في اليوم الآخر أنه يمكنك استخدام عنوان البريد الإلكتروني لنقطة النهاية التي تضيف مستخدمًا إلى مجموعة. قد يكون المسار غير الإداري، على الرغم من ذلك. فقط قم بتضمين البريد الإلكتروني كاسم للحقل مع العنوان.

إذا كنت تستخدم Discourse connect، فيمكنك إدارة المجموعات عند تسجيل الدخول، وهو ما قد ترغب في القيام به بدلاً من العبث بواجهة برمجة التطبيقات (API).

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

شكرا للمتابعة.

نحن نستخدم Discourse Connect، ولكننا نستخدم أيضًا واجهة برمجة التطبيقات (API).

بالمناسبة، ذكرتَ قد يكون المسار غير الإداري، مع ذلك

لذا سيكون طلب PUT هذا:

/groups/{group_id}/members.json

… مع 'email': (user email) كحمولة … وهل يعرف Discourse فقط أن المستخدم الخاص بي لديه حقوق المسؤول لإضافة هذا المستخدم إلى هذه المجموعة؟

(… آسف، أنا لست واضحًا بشأن سبب وجود مسارين لنفس هذه العملية …)

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

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