كيفية استخدام التحقق المخصص بواسطة OAuth مع DiscourseConnect؟

أنا في منتصف محاولة تحويل كل شيء لاستخدام طرق OAuth الخاصة بي، و Discourse هو آخر شيء في قائمتي.

الأشياء التي أود إكمالها إذا كانت ميزة:

  1. كيف يمكنني إنشاء حقول مستخدم عامة/خاصة لعرضها في صفحة المستخدم الخاصة بهم حولهم؟ مثل رتبة المجموعة ليراها أي شخص، ولكن مثل معرف Discord ليراه فقط المسؤولون والمشرفون (وأيضًا واجهة برمجة التطبيقات)؟

أيضًا، كيف يمكنني تنفيذ ذلك في بايثون باستخدام Quart؟ هذا بعض التعليمات البرمجية التي قمت ببرمجتها، على الرغم من أن الوثائق غير واضحة للغاية بشأن كيفية تمرير البيانات لـ Discourse وكيفية تضمين حقول المستخدم، ومحاولة جعلها غير قابلة للتعديل من قبل المستخدمين.

from quart import Quart, redirect, request
from rblxopencloud import OAuth2App, Group
from roblox import RobloxUser

oauth_app = OAuth2App("ROBLOX_APP_ID", "ROBLOX_APP_SECRET", "ROBLOX_APP_REDIRECT")
app = Quart(__name__)
    
@app.route("/")
async def authentication_verify():
    return redirect(oauth_app.generate_uri(["openid", "profile"]))

@app.route("/authentication/redirect")
async def authentication_redirect():
    roblox_info = oauth_app.exchange_code(request.args.get('code'))
    
    group_member: Group = RobloxUser.fetch_member(roblox_info.user, 4800717)
    group_rank = "Test Subject"
    
    if group_member != None:
        group_rank = group_member.fetch_role().name
    
    
    discord_id = "this-will-pull-from-my-db"
    
    return {
        "permalink": roblox_info.user.username,
        "username": roblox_info.user.username, 
        "uri": roblox_info.user.profile_uri, 
        "avatar_url": roblox_info.user.generate_headshot(size=420, format="jpeg", is_circular=True),
        
        # هذه أود أن تكون حقول مستخدم (عامة أو خاصة)
        "group_rank": group_rank,  # حقل مستخدم عام
        "discord_id": discord_id,  # حقل مستخدم خاص
        "roblox_id": roblox_info.user.id, # حقل مستخدم خاص
    }

app.run(host="host-ip-here", port=0000)

عندما أتحدث عن حقول المستخدم، أعني هذا الموجود في رابط ملف تعريف المستخدم:

رفع هذا الموضوع حيث ما زلت بحاجة إلى المساعدة.

ما زلت بحاجة إلى المساعدة بشأن هذا - لم أتوصل إلى حل بعد.

تحديث بخصوص سؤالي:

  1. هل يجب علي ترميز عنوان URL باستخدام base64 أم يمكنني تركه عاديًا بدون ترميز؟
  2. كيف يمكنني إرجاع البيانات؟ هل هو شيء مثل:
return {
        "permalink": roblox_info.user.username,
        "username": roblox_info.user.username,
        "uri": roblox_info.user.profile_uri,
        "avatar_url": roblox_info.user.generate_headshot(size=420, format="jpeg", is_circular=True),

        # هذه أود أن تكون حقول مستخدم (عامة أو خاصة)
        "group_rank": group_rank,  # حقل مستخدم عام
        "discord_id": discord_id,  # حقل مستخدم خاص
        "roblox_id": roblox_info.user.id, # حقل مستخدم خاص
    }