إنشاء مستخدم برمجيًا باستخدام معرف مستخدم OAuth2

هل توجد طريقة لإدراج صف داخل جدول user_associated_account من خلال واجهة برمجة التطبيقات (REST API)؟

لأعطيك بعض السياق، أحتاج إلى القدرة على إنشاء مستخدمين في مثيل Discourse الخاص بنا وربطهم بمزود OAuth2 الخاص بنا. عندما يسجل المستخدمون الدخول من واجهة مستخدم Discourse (عبر إضافة OAuth2 Basic)، يتم ربط حساباتهم ويمكنني الحصول على معرف المستخدم في Discourse من معرفهم الخارجي باستخدام GET /u/by-external/oauth2_basic/{external_uid}.

ومع ذلك، عندما ننشئ مستخدمين عبر واجهة برمجة التطبيقات (POST /users.json)، لا أرى أي طريقة لربط حساباتهم بحسابات OAuth2 المقابلة لهم (إذا لم يسجلوا الدخول يدويًا في Discourse).

للعلم، نفذت إضافة OAuth2 Basic نظام Auth::ManagedAuthenticator الجديد: Move to ManagedAuthenticator by angusmcleod · Pull Request #21 · discourse/discourse-oauth2-basic · GitHub

ما حاولت فعله:

  • راجعت وثائق واجهة برمجة التطبيقات ولم أجد أي تلميح.
  • عثرت على مسار واجهة برمجة التطبيقات الذي يُستدعى للحصول على الحسابات المرتبطة لمستخدم واحد: GET /u/{username}/emails.json. لكن يبدو أن هذا المسار لا يدعم طريقة HTTP PUT ولا يعرض الحقول من جدول user_associated_accounts (provider_name، provider_uid، و user_id).
  • راجعت أيضًا إعدادات Discourse لمعرفة ما إذا كان هناك أي شيء يتعلق بهذه المشكلة دون جدوى.
  • تحققت من موقع meta.discourse.org ولم أجد حلاً.

أي مساعدة مُقدَّرة جدًا! شكرًا لك :slight_smile:

طالما قمت بإنشاء المستخدم باستخدام نفس عنوان البريد الإلكتروني الذي يوفره OAuth، فلا داعي للقلق.

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

شكرًا لتعليقاتك!
أود ألا أقلق بشأن هذا الأمر، لكنني بحاجة إلى القدرة على جلب المستخدم من معرف المزود الخاص بي ( GET /u/by-external/oauth2_basic/{external_uid}).
هذا غير ممكن حتى يسجل المستخدم دخوله يدويًا عبر واجهة المستخدم (أود تجنب ذلك).

أعتقد أنه يمكن عرض associated_accounts بهذه الطريقة عند إنشاء مستخدم جديد:

POST /users.json
{
  username: "something",
  email: "test@test.com",
  associated_accounts: [
    {
      provider_name: "oauth2_basic",
      provider_uid: "12345"
    }
  ]
}

هذا سيكون مثالياً!

ملاحظة: هذا مشابه لباراميتر provider و extern_uid في واجهة برمجة تطبيقات مستخدمين Gitlab (Users API | GitLab Docs)