كيف يمكنني السماح للمستخدمين بإعجاب المنشورات باستخدام REST API

مرحباً بالجميع. أنا جديد جدًا على Discourse وتحققت من قسم كافة إعدادات الموقع (/admin/site_settings) للعثور على خيار مطابق للسماح لأي مستوى من المستخدمين بالإعجاب بالمنشورات باستخدام RESTapi.

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

إليك إعدادات الفئة الخاصة بي،

أنا أستخدم الكود التالي لإضافة إعجاب عبر API

  public async likeOrThrow(contentId: number, username: string) {
    try {
      this.overrideUsername(username);
      const res = await this.client.post(`post_actions.json`, {
        id: contentId,
        post_action_type_id: 2,
        flag_topic: false,
      });
      return res.data;
    } catch (error) {
      throw this.getException(error);
    } finally {
      this.resetUsername();
    }
  }

يحدث خطأ،

أنت غير مصرح لك بعرض المورد المطلوب.

ومع ذلك، إذا قمت بتسجيل الدخول إلى Discourse كمستخدم، فيمكن لهذا المستخدم الإعجاب،

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

هل يمكنك مساعدتي في معرفة ما أفعله بشكل خاطئ هنا؟ أخبرني إذا كانت هناك حاجة لمزيد من المعلومات.

شكرًا

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

أعتقد أنك ستحتاج إلى

لا أعرف، ولكن يمكنك جعل إعدادات الفئة الخاصة بك أسهل باستخدام everyone فقط.

إعجابَين (2)

مرحباً @Bas شكراً على تعليقك،

ولكن لماذا فقط لـ like؟ لقد قمت بالفعل بتطبيق إنشاء المنشورات، وإنشاء الردود، وإضافة الإشارات المرجعية، وإزالتها باستخدام واجهة برمجة تطبيقات Discourse باستخدام مفتاح عام (مستوى المستخدم: جميع المستخدمين، النطاق: عام)

حاولت أيضاً إنشاء مفتاح واجهة برمجة تطبيقات عام جديد، وما زلت أحصل على نفس الخطأ :frowning:

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

نعم، يبدو هذا الرمز جيدًا بالنسبة لي أيضًا.

كيف / إلى ماذا يتم تعيين contentId؟ هل هو Post.id الصحيح؟

مرحباً @RGJ

contentId هو معرف المنشور ونعم، إنه معرف المنشور الصحيح.

باستخدام التعليمات البرمجية التالية، يتم تسجيل،

      this.client.interceptors.request.use((config) => {
        Logger.log(`Request to ${config.url}`);
        Logger.log(`Headers: ${JSON.stringify(config.headers, null, 2)}`);
        Logger.log(`Body: ${JSON.stringify(config.data, null, 2)}`);
        return config;
      })

السجل،

[Nest] 97134  - 12/02/2024, 4:10:29 PM     LOG Request to post_actions.json
[Nest] 97134  - 12/02/2024, 4:10:29 PM     LOG Headers: {
  "Accept": "application/json, text/plain, */*",
  "Api-Username": "m...91",
  "Api-Key": "66dc....18b56fbc17bcf"
}
[Nest] 97134  - 12/02/2024, 4:10:29 PM     LOG Body: {
  "id": 84,
  "post_action_type_id": 2,
  "flag_topic": false
}

يا إلهي، أعتقد أنني وجدت المشكلة. :grimacing:

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

ولكن عندما اختبرته باستخدام نظامي، كنت أحاول إضافة إعجاب إلى منشور خاص بي.

أعتذر عن أي إزعاج. لم أكن أدرك أنه لا يمكن الإعجاب بمنشورات المرء الخاصة.

شكرًا لك وأتمنى لك يومًا سعيدًا.

3 إعجابات

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.