اختيار الأفاتار للمستخدم عبر API لم يعد يعمل

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

حتى قبل بضعة أيام، كان تحميل/تحديث الصور الرمزية من موقع الويب إلى Discourse، عبر واجهة برمجة التطبيقات يعمل. الآن أحصل على خطأ 422 - كيان غير قابل للمعالجة.

لقد حاولت تصحيح المشكلة، وقمت ببعض الاختبارات باستخدام Postman ولدي نفس المشاكل. الطلب الذي أقوم به أدناه (مع إزالة عنوان URL واسم المستخدم ومفتاح API، بالطبع).

هل يعرف أي منكم ما إذا كانت هناك أي مشكلة في هذا الجزء من Discourse؟

شكراً مقدماً.

مثالي:

curl --location --request PUT 'https://{{URL}}/u/{{USERNAME}}/preferences/avatar/pick' \
--header 'Api-Key: {{API_KEY}}' \
--header 'Api-Username: system' \
--header 'Content-Type: application/json' \
--data-raw '{
"upload_id": 972,
"type": "uploaded"
}'

هل من مجيب؟ ألم يجد أحد نفس المشكلة؟

هل هذا متعلق بالتغيير في واجهة برمجة التطبيقات (API) للتحميل المباشر إلى S3؟

أعتقد أن هذا سيتداخل مع التحميل الفعلي، وليس تعيين الصورة الرمزية للمستخدم.

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

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

أنا أجرب حظي وأعزز هذه المرة الأخيرة. من الغريب أن لا أحد قد وجد هذا. أنا متأكد من أنها ليست مشكلة في الترميز لأنها كانت تعمل منذ أكثر من عامين.

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

أعتقد أن هذا يرجع إلى إعداد الموقع discourse connect overrides avatar.

يستبدل صورة المستخدم بقيمة من حمولة DiscourseConnect. إذا تم تمكينه، فلن يُسمح للمستخدمين بتحميل صور رمزية على Discourse.

على جهازي المحلي مع إلغاء تحديد هذا الخيار، أحصل على استجابة http 200 عند تحديث الصورة الرمزية عبر واجهة برمجة التطبيقات:

curl -i -sS -X PUT "http://localhost:4200/u/10614bb2d4eacd328c45/preferences/avatar/pick.json"  \
-H "Content-Type: multipart/form-data"  \
-H "Api-Key: 6cea489d21282803c446fd2e9d236901c3d186f36079911833db4b57c43c01d5"  \
-H "Api-Username: blake.erickson"  \
-F "upload_id=57"  \
-F "type=uploaded"

HTTP/1.1 200 OK

وأحصل على 422 مع تحديد هذا الإعداد:

curl -i -sS -X PUT "http://localhost:4200/u/021ca796a01ad178bc52/preferences/avatar/pick.json"  \
-H "Content-Type: multipart/form-data"  \
-H "Api-Key: 6cea489d21282803c446fd2e9d236901c3d186f36079911833db4b57c43c01d5"  \
-H "Api-Username: blake.erickson"  \
-F "upload_id=57"  \
-F "type=uploaded"

HTTP/1.1 422 Unprocessable Entity
إعجاب واحد (1)

مرحباً بليك. شكراً على المساعدة.

تمكين أو تعطيلها لا يُحدث فرقاً، للأسف.

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

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

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

شكراً جزيلاً لك يا بليك. من فضلك أخبرني إذا كان هناك أي شيء يمكنني المساعدة به.

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

سبب آخر لـ 422 من هذه الطريقة يمكن أن يكون إذا كان الإعداد allow_uploaded_avatars هو false. أراهن أن هذه هي المشكلة.

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

مرحباً ريتشارد! شكراً على مدخلاتك.

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

هل يمكنك إخباري بما قمت بتعيينه لـ allow_uploaded_avatars؟ لم يعد مجرد إعداد صحيح/خطأ، ولكنه تم تعيينه لمستوى ثقة معين. وهل يمكنك إخباري بمستوى ثقة المستخدم الذي يحاول تغيير صورته الرمزية؟ وهل أنت على أحدث إصدار من Discourse؟

هنا الكود لاختيار صورة رمزية والأسطر التي تُرجع استجابات 422.

ليس أنه لا يمكن أن يكون شيئًا آخر في أعماق قاعدة الكود، ولكنه على الأرجح أحد هذه الثلاثة. الأول له علاقة بـ discourse_connect_overrides_avatar ويبدو أننا استبعدنا هذا. لا أعتقد أنه الثاني لأن أمر curl الخاص بك يبدو صحيحًا ويتضمن النوع “uploaded”. قد يكون لا يزال الثالث مع إعداد allow_uploaded_avatars وهذا هو السبب في أنني أود معرفة ما قمت بتعيينه لهذا الإعداد.

لقد قمت بتعطيله حتى بدأت هذه المشكلة. ثم قمت بتغييره إلى 0: مستخدم جديد.

لكن تعطيله كان يعمل دائمًا بالنسبة لي. لا أريد للمستخدمين تحميل الملفات فعليًا من المنتدى، بل من موقع الويب الذي يستخدم تسجيل الدخول الموحد (SSO). ومع ذلك، فإن تغييره إلى 0: مستخدم جديد لا يغير شيئًا. ما زلت أحصل على نفس الخطأ :frowning:

لا يمكنني العثور على أي تحديث حديث قد يكون أوقف عمل الصور الرمزية عبر واجهة برمجة التطبيقات (API) عندما تكون جميع إعدادات الموقع تحظرها. على أي حال، إذا كنت تستخدم SSO (أو DiscourseConnect)، فيجب عليك استخدام مسار واجهة برمجة التطبيقات /admin/users/sync_sso لتحديث الصورة الرمزية للمستخدمين وليس المسار في واجهة المستخدم (/u/username/preferences/avatar/pick).

وتمرير هذه المعلمات في جسم الطلب:

avatar_url: "url-of-image",
avatar_force_update: "true"

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

لا يمكنني العثور على أي معلومات حول هذا الـ endpoint في توثيق الـ API. هل هذا شيء جديد؟

أيضًا، كما أشرت سابقًا، كان تحديث الصورة الرمزية يعمل بشكل جيد لعدة أشهر باستخدام الـ endpoint /u/username/preferences/avatar/pick، وهو أمر غريب حقًا. لقد توقف عن العمل فجأة. هذا يحيرني حقًا.

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

يمكنك العثور على بعض المعلومات هنا: Setup DiscourseConnect - Official Single-Sign-On for Discourse (sso)

وكذلك كيفية استخدام جوهرة Ruby discourse_api لنقطة النهاية sync_sso: discourse_api/lib/discourse_api/single_sign_on.rb at main · discourse/discourse_api · GitHub و discourse_api/lib/discourse_api/api/sso.rb at main · discourse/discourse_api · GitHub

سيحتاج إلى استخدام نفس سر SSO الذي يستخدمه موفر SSO الخاص بك.

شكرًا لك يا بليك.

لا يزال الأمر غير منطقي بالنسبة لي أن الأمور توقفت عن العمل من تلقاء نفسها وأنني أحصل على أخطاء 422 يمينًا ويسارًا، حتى مع هذا الـ endpoint.

سأحاول إيجاد حل مختلف.

شكرًا جزيلاً على وقتك.

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