Wie man benutzerdefinierte OAuth-Verifizierung mit DiscourseConnect verwendet

Ich versuche gerade, alles auf meine OAuth-Methoden umzustellen, und Discourse ist das Letzte auf meiner Liste.

Folgendes würde ich gerne abschließen, wenn es eine Funktion ist:

  1. Wie kann ich öffentliche/private Benutzerfelder erstellen, die auf ihrer Benutzerseite über sie angezeigt werden? Wie z. B. Gruppenrang, den jeder sehen kann, aber wie z. B. Discord-ID, die nur Administratoren und Moderatoren sehen können (auch API)?

Wie implementiere ich das in Python mit Quart? Dies ist ein Code, den ich programmiert habe, obwohl die Dokumentation sehr unklar darüber ist, wie Daten für Discourse übergeben werden und wie Benutzerfelder erstellt werden, und versucht, sie nicht von Benutzern bearbeiten zu lassen.

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),
        
        # Diese möchte ich als Benutzerfelder haben (entweder öffentlich oder privat)
        "group_rank": group_rank,  # Öffentliches Benutzerfeld
        "discord_id": discord_id,  # Privates Benutzerfeld
        "roblox_id": roblox_info.user.id, # Privates Benutzerfeld
    }

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

Wenn ich von Benutzerfeldern spreche, meine ich die Felder, die sich im Link zum Benutzerprofil befinden:

Ich stoße dies hoch, da ich immer noch Hilfe benötige.

Ich brauche hier immer noch Hilfe – habe es noch nicht herausgefunden.

Update zu meiner Frage:

  1. Muss ich die URL mit base64 kodieren oder kann ich sie einfach normal lassen, ohne sie zu kodieren?
  2. Wie würde ich Daten zurückgeben? Ist es so etwas wie:
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),

        # Diese möchte ich als Benutzerfelder haben (entweder öffentlich oder privat)
        "group_rank": group_rank,  # Öffentliches Benutzerfeld
        "discord_id": discord_id,  # Privates Benutzerfeld
        "roblox_id": roblox_info.user.id, # Privates Benutzerfeld
    }