| ملخص | يدعم 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، بالإضافة إلى رابطين أو أكثر.
- انتقل إلى الإدارة → الإعدادات → تسجيل الدخول عبر OAuth2 وأدخل الإعدادات الأساسية لمزوِّد OAuth2:
oauth2_enabled- فعّل هذه الميزةoauth2_client_id- معرف العميل من مزوِّدكoauth2_client_secret- سر العميل من مزوِّدكoauth2_authorize_url- رابط التفويض الخاص بمزوِّدكoauth2_token_url- رابط الرمز المميز الخاص بمزوِّدك.
إذا لم تتمكن من تحديد القيم للإعدادات أعلاه، فراجع وثائق المطورين من مزوِّدك أو اتصل بدعمهم الفني.
إعداد نقطة نهاية مستخدم JSON
أصبح Discourse الآن قادرًا على استلام رمز تفويض من مزوِّد OAuth2 الخاص بك. للأسف، يحتاج Discourse إلى معلومات إضافية لإكمال المصادقة.
نحتاج إلى نقطة نهاية API يمكن الاتصال بها لاسترداد معلومات عن المستخدم بناءً على الرمز المميز.
على سبيل المثال، يوفر مزوِّد OAuth2 SoundCloud رابطًا كهذا. إذا كان لديك رمز OAuth2 صالح لـ 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 لاسم المستخدم مقارنةً بـ username في 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_email_path، فيجب على مزوِّد OAuth2 تأكيد أن المستخدم يملك عنوان البريد الإلكتروني هذا. الفشل في القيام بذلك قد يؤدي إلى الاستيلاء على الحساب في Discourse!
مُستضاف لدينا؟ هذه الإضافة متاحة في خططنا للأعمال والشركات. OAuth 2.0 & OpenID Connect Support | Discourse - Civilized Discussion
هل تحتاج إلى أتمتة تسجيلات المستخدمين؟ راجع Auto-provisioning user accounts when SSO is enabled