| ملخص | يدعم Discourse OAuth2 Basic مزودي OAuth2 الأساسيين، بافتراض وجود نقطة نهاية JSON حيث يمكن استرداد تفاصيل المستخدم بواسطة الرمز المميز. | |
| دليل التثبيت | هذه الإضافة مدمجة في نواة Discourse. لا حاجة لتثبيت الإضافة بشكل منفصل. |
الميزات
تتيح لك هذه الإضافة استخدام مزود OAuth2 أساسي كمصدر للمصادقة في Discourse. يجب أن تعمل مع العديد من المزودين، مع التحذير من أنه يجب عليهم توفير نقطة نهاية JSON لاسترداد معلومات عن المستخدم الذي تقوم بتسجيل الدخول.
هذا مفيد بشكل أساسي للأشخاص الذين يستخدمون مزودي تسجيل دخول غير شائعين. إذا كنت ترغب في استخدام Google أو Facebook أو Twitter، فهي متضمنة بشكل افتراضي ولا تحتاج إلى هذه الإضافة. يمكنك أيضًا البحث عن مزودي تسجيل دخول آخرين في مستودع Github الخاص بنا.
التكوين
التكوين الأساسي
- أولاً، قم بتسجيل تطبيق Discourse الخاص بك مع مزود OAuth2. سيتطلب URI إعادة التوجيه الذي سيكون:
http://DISCOURSE_HOST/auth/oauth2_basic/callback
استبدل
DISCOURSE_HOSTبالقيمة المناسبة، وتأكد من استخدامhttpsإذا كان مفعّلًا. يجب أن يزودك مزود OAuth2 بـclient IDوsecret، بالإضافة إلى بضع عناوين URL.
- انتقل إلى الإدارة → الإعدادات → تسجيل الدخول عبر OAuth2 وأدخل التكوين الأساسي لمزود OAuth2:
oauth2_enabled- قم بتفعيل هذه الخانة لتمكين الميزةoauth2_client_id- معرف العميل من مزودكoauth2_client_secret- سر العميل من مزودكoauth2_authorize_url- عنوان URL للمصادقة الخاص بمزودكoauth2_token_url- عنوان URL للرمز المميز الخاص بمزودك.
إذا لم تتمكن من معرفة قيم الإعدادات المذكورة أعلاه، راجع وثائق المطور من مزودك أو اتصل بدعمهم الفني.
تكوين نقطة نهاية JSON للمستخدم
أصبح Discourse الآن قادرًا على استلام رمز مصادقة من مزود OAuth2 الخاص بك. للأسف، يتطلب Discourse معلومات إضافية لإكمال المصادقة.
نحتاج إلى نقطة نهاية API يمكن الاتصال بها لاسترداد معلومات حول المستخدم بناءً على الرمز المميز.
على سبيل المثال، يوفر مزود OAuth2 SoundCloud عنوان URL من هذا النوع. إذا كان لديك رمز مصادقة SoundCloud، يمكنك إجراء طلب GET إلى https://api.soundcloud.com/me?oauth_token=A_VALID_TOKEN وستحصل على كائن JSON يحتوي على معلومات عن المستخدم.
لتكوين ذلك في Discourse، نحتاج إلى تعيين قيمة إعداد oauth2_user_json_url. في هذه الحالة، سندخل القيمة التالية:
https://api.soundcloud.com/me?oauth_token=:token
الجزء الذي يحتوي على :token يخبر Discourse بأنه يحتاج إلى استبدال هذه القيمة بالرمز المميز للمصادقة الذي تلقاه عند اكتمال المصادقة.
هناك خطوة أخيرة واحدة لإكمالها. نحتاج إلى إخبار Discourse بالسمات المتاحة في JSON الذي استلمناه. إليك استجابة نموذجية من SoundCloud:
{
"id": 3207,
"permalink": "jwagener",
"username": "Johannes Wagener",
"uri": "https://api.soundcloud.com/users/3207",
"permalink_url": "http://soundcloud.com/jwagener",
"avatar_url": "http://i1.sndcdn.com/avatars-000001552142-pbw8yd-large.jpg?142a848",
"country": "Germany",
"full_name": "Johannes Wagener",
"city": "Berlin"
}
يجب تعيين متغيرات oauth2_json_user_id_path، oauth2_json_username_path، oauth2_json_name_path، و oauth2_json_email_path لتشير إلى السمات المناسبة في JSON.
السمة الإلزامية الوحيدة هي id - نحتاجها حتى عندما يسجل المستخدم الدخول في المستقبل يمكننا استرجاع الحساب الصحيح. السمات الأخرى رائعة إذا كانت متوفرة — ستجعل عملية التسجيل أسرع للمستخدم حيث سيتم تعبئتها تلقائيًا في النموذج.
إليك كيف قمت بتكوين إعدادات مسار JSON:
oauth2_json_user_id_path: 'id'
oauth2_json_username_path: 'permalink'
oauth2_json_name_path: 'full_name'
استخدمت permalink لأنه يبدو أكثر تشابهًا مع ما يتوقعه Discourse لاسم المستخدم مقارنة بالاسم المستخدم في JSON الخاص بهم. لاحظ أنني لم أذكر مسار البريد الإلكتروني: لا يوفر SoundCloud عنوان بريد إلكتروني، لذا سيحتاج المستخدم إلى تقديمه والتحقق منه عند التسجيل لأول مرة في Discourse.
إذا كانت الخصائص التي تريدها من كائن JSON الخاص بك متداخلة، يمكنك استخدام النقاط. على سبيل المثال، إذا كان API يعيد هيكلًا مختلفًا مثل هذا:
{
"user": {
"id": 1234,
"email": {
"address": "test@example.com"
}
}
}
يمكنك استخدام user.id لـ oauth2_json_user_id_path و user.email.address لـ oauth2_json_email_path.
إذا كانت المفتاح نفسه يتضمن نقاطًا، فستحتاج إلى وضع علامات اقتباس مزدوجة حوله، أو استخدام علامة تعويضية للنقاط بعلامة مائلة للخلف. على سبيل المثال، بالنظر إلى هذا JSON:
{
"example.com/uid": "myuid"
}
ستحدد المسار كـ example\.com/uid أو "example.com/uid"
مزامنة المجموعة وحقل المستخدم
-
oauth2_json_groups_path: مسار JSON الذي يحتوي على مجموعات المستخدم كمصفوفة من السلاسل النصية. بعد تسجيل دخول أول عضو، ستكون هذه المجموعات متاحة للاختيار في قسم «المجموعات المرتبطة» من إعدادات المجموعة في Discourse. اتركها فارغة لتعطيل مزامنة المجموعات. -
oauth2_user_field_mappings: خرائط لمسارات JSON سيتم تخزينها في حقول مستخدم Discourse. يتم تحديد حقول المستخدم بمعرفها الرقمي، الذي يمكن العثور عليه في عنوان URL عند تحريرها عبر لوحة الإدارة.
إذا قمت بتعيين
oauth2_json_email_path، يجب أن يؤكد مزود OAuth2 أن المستخدم يملك عنوان البريد الإلكتروني هذا. الفشل في القيام بذلك قد يؤدي إلى الاستيلاء على الحساب في Discourse!
مستضاف لدينا؟ هذه الإضافة متاحة في خططنا للأعمال والشركات. OAuth 2.0 & OpenID Connect Support | Discourse - Civilized Discussion
هل تحتاج إلى أتمتة تسجيلات دخول المستخدمين؟ راجع Auto-provisioning user accounts when SSO is enabled