هل يمكن للمستخدم غير المسؤول إصدار مفتاح API الخاص به؟

مرحبًا :waving_hand:،

أنا أقوم بإنشاء إجراء على GitHub للنشر في منتدى Discourse.
وجدت واجهة برمجة التطبيقات للنشر، غير أن الوثائق تشير إلى أن مستخدمي Discourse بحاجة إلى إنشاء مفتاح API من لوحة الإدارة، رغم أن المستخدمين غير المسؤولين ليس لديهم لوحة إدارة. هنا لدي عدة أسئلة:

  • هل تم تصميم مفتاح API حتى للمستخدمين غير المسؤولين؟
  • إذا كان الأمر كذلك، كيف يمكن للمستخدمين غير المسؤولين إنشاء مفتاح API الخاص بهم؟
  • إذا كان الأمر كذلك، لتمكين مفتاح API للمستخدمين غير المسؤولين، هل توجد أي إعدادات ضرورية؟
    • صفحة تفضيلات المنتدى لا تحتوي على واجهة لإنشاء مفتاح API. لذا أفترض أن هناك بعض الإعدادات التي تسمح للمستخدمين بإصدار مفاتيح API الخاصة بهم.

شكرًا مقدّمًا! :folded_hands:

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

مرحبًا @KengoTODA، أهلاً بك هنا! :slight_smile: :wave:

سيكون هذا الرابط مفيدًا لما وصفته: User API keys specification

3 إعجابات

شكرًا لك! لقد راجعت جزء “تدفق توليد مفتاح API”.

لقد فهمت أنه مخصص لتطبيقات الويب التي يمكنها توفير عنوان URL لـ auth_redirect.
هل توجد طريقة موصى بها لـ CLI أو GitHub Actions؟

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

4 إعجابات

للبرامج عبر سطر الأوامر (CLI)، إذا كان ذلك ضروريًا، يمكنك تشغيل خادم ويب محلي واستخدام عنوان URL من نوع http://localhost:XXXXX/callback. تتعامل التطبيق بطريقة مشابهة.

3 إعجابات

حسناً، سأجرب، شكراً لدعمك!

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

يمكنك إنشاء مفتاح API للمستخدم باتباع الرابط التالي: Generate User API Keys for testing

إعجابَين (2)

أعمل في هذا الفرع، ونجحت في تشغيل الأمر باستخدام localhost كعنوان إعادة توجيه. ومع ذلك، بعد الضغط على زر التفويض، أبلغت الصفحة https://meta.discourse.org/user-api-key عن خطأ في JavaScript ولم تتمكن من إكمال العملية. يعمل سكربت Ruby لكنه يفشل أيضًا عند إضافة معلمة auth_redirect.

إليك الاستثناء الذي أبلغت عنه وحدة تحكم المتصفح:

Uncaught TypeError: Cannot set property 'isReadOnly' of undefined
    at Function.createCurrent (_application-42d4413fabab7a4b12e0c25fb01f736af560aa283089071a8493f37c9b042a4a.js:44867)
    at Function.current (_application-42d4413fabab7a4b12e0c25fb01f736af560aa283089071a8493f37c9b042a4a.js:8816)
    at Object.initialize (_application-42d4413fabab7a4b12e0c25fb01f736af560aa283089071a8493f37c9b042a4a.js:70403)
    at Object.i.initialize (_application-42d4413fabab7a4b12e0c25fb01f736af560aa283089071a8493f37c9b042a4a.js:7001)
    at _ember_jquery-189e46ebcb33594b835e782fd1ce916ec750bc0cf980ebc4fb7796649161a18d.js:49660
    at i.each (_ember_jquery-189e46ebcb33594b835e782fd1ce916ec750bc0cf980ebc4fb7796649161a18d.js:67904)
    at i.walk (_ember_jquery-189e46ebcb33594b835e782fd1ce916ec750bc0cf980ebc4fb7796649161a18d.js:67891)
    at n.each (_ember_jquery-189e46ebcb33594b835e782fd1ce916ec750bc0cf980ebc4fb7796649161a18d.js:67858)
    at n.topsort (_ember_jquery-189e46ebcb33594b835e782fd1ce916ec750bc0cf980ebc4fb7796649161a18d.js:67758)
    at t._runInitializer (_ember_jquery-189e46ebcb33594b835e782fd1ce916ec750bc0cf980ebc4fb7796649161a18d.js:49667)

سأرفق لقطة شاشة من تحليل كود JavaScript. يبدو أن siteAttributes متوقع أن تكون قيمة صحيحة، لكنها undefined. إذا كان لديك أي اقتراح لي، يرجى إخباري. شكرًا لك!

أقوم بالتحقيق في هذه المشكلة.

يُطلق JavaScript خطأً لأن طريقة POST لـ /user-api-key تُرجع 403، وطريقة build_not_found_page في وحدة التحكم لا تستدعي طريقة preload_anonymous_data التي تخزن القيمة المُحمَّلة مسبقًا.

غير مؤكد سبب استجابة الخادم بـ 403 مع <h1 class="title">عفوًا! هذه الصفحة خاصة.</h1> عندما أضفت معلمة auth_redirect. حاولت استخدام نفس النطاق لـ URL الاستدعاء (للتحقق من مشكلة تنفيذ السكريبتات عبر المواقع) وبروتوكول HTTPS، لكن دون جدوى.

يجب عليك إضافة النطاق (والمسار) إلى إعداد الموقع allowed user api auth redirects.

إذا كنت تُصدر طلبات HTTP يدويًا، فيجب أن يعمل discourse://auth_redirect.

3 إعجابات

شكرًا لك، لقد وجدت الإعدادات في site_settings.yml وفهمت سبب استجابة طلبي برمز 403.

لا يعمل discourse://auth_redirect كما أتوقع، لذا سأحاول طلب إدخال الرمز المشفر من المستخدمين يدويًا، تمامًا كما في كود Ruby.

ملاحظة للمستخدمين الآخرين: لقد قمت بإنشاء وحدة node يمكن استدعاؤها عبر أمر npx. ستقوم بإنشاء مفتاح API مع نطاق write. آمل أن يساعد ذلك في عملية إعداد الأنظمة التي تحتاج إلى رمز Discourse API.

إعجابَين (2)

تعديل: مرحبًا @KengoTODA. كان كود GitHub الخاص بك مفيدًا في توجيهي إلى الاتجاه الصحيح. لا زلت أعمل على حل بعض الأمور، ثم سأكتب ملخصًا لكيفية نجاحي في جعل الأمور تعمل.

ساعدني كود GitHub الخاص بـ @KengoTODA بشكل كبير. لدي الآن نسخة عاملة من مصادقة المستخدمين على أساس كل مستخدم لإجراء مكالمات API إلى discourse. لقد دوّنت خطواتي هنا: User API keys specification - #45 by JQ331

إعجابَين (2)