pablogg
(Pablo)
12 أبريل 2020، 4:51م
1
ترقيةي لـ Discourse كانت بالأمس، وحصلت على جميع استدعاءات واجهة برمجة التطبيقات (API) مع خطأ. لقد وجدت أن المشكلة تكمن في رؤوس المصادقة (1)، لكنني جربت بعض الاستدعاءات وحصلت على هذا الخطأ:
تم حظر الوصول إلى XMLHttpRequest في 'https://mydomain.com/notifications.json?username=admin' من المصدر 'https://mydomain.com' بسبب سياسة CORS: حقل رأس الطلب api-username غير مسموح به بواسطة Access-Control-Allow-Headers في استجابة التمهيد.
أستخدم Vue وقد أضفت api-key و api-username إلى الرؤوس على النحو التالي:
Vue.http
.get(
"https://discourse.mydomain.com/notifications.json?username="+input.username,
{
headers: {
"Api-Key":"xxxxxxxxxxxxxxxxx",
"Api-Username": "system",
"content-type": "application/json",
accept: "application/json"
}
}
)
(1) Discourse REST API Documentation
blake
(Blake Erickson)
12 أبريل 2020، 5:29م
2
قد تحتاج إلى إعداد CORS في إعدادات موقعك؟
pablogg
(Pablo)
12 أبريل 2020، 5:54م
3
نعم، لقد أضفت النطاق الذي أستخدمه لاستدعاء واجهة برمجة التطبيقات في إعدادات discourse، لكنني لا أعرف متى يجب حل خطأ حقل api-username.
RGJ
(Richard - Communiteq)
12 أبريل 2020، 6:05م
4
هل تضع مفتاح API الخاص بـ system في كود جانب العميل؟
هذا يعني أن أي شخص يمكنه التقاطه من كود JavaScript الخاص بك واستخدامه للسيطرة الكاملة على منتداك.
يجب أن تستفيد أي طلبات HTTP Ajax موجهة إلى Discourse من جلسة موجودة مسبقًا، أو ألا تحتاج إلى جلسة على الإطلاق.
pablogg
(Pablo)
12 أبريل 2020، 6:09م
5
ليس مجرد اختبار، أنا أستخدم اسم المستخدم
Vue.http
.get(
"https://discourse.mydomain.com/notifications.json?username="+input.username,
{
headers: {
"Api-Key":"xxxxxxxxxxxxxxxxxxxxxx",
"Api-Username": input.username
}
}
)
لكنني أحصل على نفس الخطأ المتعلق بـ CORS وحقل api-username.
RGJ
(Richard - Communiteq)
12 أبريل 2020، 6:09م
6
دعني أكرر ما قلته:
هذا يعني: لا توجد رؤوس مصادقة. على الإطلاق.
blake
(Blake Erickson)
12 أبريل 2020، 6:24م
7
يجب ألا تستخدم بيانات اعتماد هذه الـ API لطلبات CORS، وهذا هو السبب في عدم السماح بحقل الرأس هذا.
Oh, so you are trying to make this request from a client-side javascript application? That is not permitted for numerous reasons. For example, if you include an admin API key in the source code of your javascript app, any user could gain full admin access to your forum. Here is a previous topic on the subject.
ومع ذلك، فإننا نسمح برؤوس user-api في CORS:
I’m trying to post comments to my Discourse instance from another web application using user api keys. I managed to get the user key following the method described in your original topic and this other useful discussion .
After getting the key, when I send it along with my requests as a value of the User-Api-Key header, I get the Request header field User-Api-Key is not allowed by Access-Control-Allow-Headers error.
As I asked in my PR , I’m not sure if it’s enough to add the headers in the file…
pablogg
(Pablo)
12 أبريل 2020، 7:14م
8
لقد قرأت مواصفات مفاتيح واجهة برمجة التطبيقات للمستخدمين …
في حالتي، لدي مصادقة موحدة (SSO) مع تطبيق واجهة أمامية بلغة JavaScript، هل يمكنني استخدام واجهة برمجة التطبيقات دون استخدام واجهة المستخدم للمصادقة لكل مستخدم؟ أود وجود طريقة يمكنني من خلالها استخدام اسم المستخدم الخاص بواجهة برمجة التطبيقات (api-username)… هل هذا ممكن؟
تحياتي
هل يمكنك حل هذا؟
شكرًا لك!
pablogg
(Pablo)
22 يوليو 2020، 7:27ص
10
في النهاية، عدت إلى الإصدار السابق من Discourse حتى لا أحتاج إلى تغيير جميع تكاملات واجهة برمجة التطبيقات