Discourse auf einem eigenen VPS installieren: Ein Prozess mit FAQs

wie ich oben gesagt habe:

und hier hast du gepostet:

was weißt du über MiniOrange? Der kostenlose Plan scheint nur auf wenige Benutzer beschränkt zu sein, und damit könnte es für dich teuer werden, wenn du den Basisplan für 49 $/Monat wählst:

Gründliche Recherche und sorgfältiges Lesen sind unerlässlich, wenn du planst, was du erreichen möchtest.

Weißt du, wie man ein Velo-Skript für Wix schreibt?

Vielleicht eine JavaScript-Lösung

Ich denke, du musst einen benutzerdefinierten API-Endpunkt direkt auf deiner Wix-Site einrichten, um die Anmeldeanfragen von Discourse zu empfangen. Es sieht so aus, als ob das JavaScript-Code in einem Velo-Modul mit einer Datei namens http-functions.js erfordern wird.

Dies wird den Benutzer von Discourse abfangen, umleiten und ihre angemeldete Wix-Sitzung verifizieren, eine signierte Payload generieren und sie hoffentlich sicher zurück ins Forum leiten.

Vielleicht so etwas wie dies:

import { ok, redirect, badRequest } from 'wix-http-functions';
import { currentMember } from 'wix-members-backend';
import crypto from 'crypto';

// Wähle einen sicheren zufälligen String für das Geheimnis

const DISCOURSE_SECRET = "DEIN_SUPER_GEHEIMER_STRING_HIER"; 

export async function get_discourseSso(request) {
    const query = request.query;
    const payload = query.sso;
    const sig = query.sig;

    if (!payload || !sig) {
        return badRequest({ body: "SSO-Parameter fehlen" });
    }

    // Validiere die eingehende Signatur von Discourse

    const computedSig = crypto.createHmac('sha256', DISCOURSE_SECRET).update(payload).digest('hex');
    if (computedSig !== sig) {
        return badRequest({ body: "Ungültige kryptografische Signatur" });
    }

    // Prüfe, ob der Benutzer bei Wix angemeldet ist

    const member = await currentMember.getMember({ fieldsets: ['FULL'] });
    
    // Parse die eingehende Payload, um das eindeutige Tracking-Nonce zu extrahieren

    const decodedPayload = Buffer.from(payload, 'base64').toString('ascii');
    const params = new URLSearchParams(decodedPayload);
    const nonce = params.get('nonce');

    if (!member) {
        // Wenn nicht angemeldet, zwingen wir sie, sich zuerst bei Wix anzumelden, und kommen dann hierher zurück
        const loginUrl = `https://deinewixseite.com{encodeURIComponent(request.url)}`;
        return redirect(loginUrl);
    }

    // Baue die Benutzer-Payload für Discourse

    const userPayload = `nonce=${nonce}&email=${encodeURIComponent(member.loginEmail)}&external_id=${member._id}&username=${encodeURIComponent(member.profile.nickname || member._id)}&name=${encodeURIComponent(member.contactDetails.firstName + ' ' + member.contactDetails.lastName)}`;

    // Verschlüssele und signiere die Benutzer-Payload
    const base64Payload = Buffer.from(userPayload).toString('base64');
    const returnSig = crypto.createHmac('sha256', DISCOURSE_SECRET).update(base64Payload).digest('hex');

    // Leite sie als angemeldeten Benutzer zurück zu Discourse
    const discourseReturnUrl = `https://deinforum.com{encodeURIComponent(base64Payload)}&sig=${returnSig}`;
    return redirect(discourseReturnUrl);
}

Du musst auch deine Forum-URL dort ersetzen.

Es wird auch einige DiscourseConnect-Konfiguration geben, aber mach keines dieser Dinge, bis du ein tatsächliches selbst gehostetes Forum ohne Fehler am Laufen hast.

Ich bin kein Experte in irgendeinem dieser Bereiche und kenne mich kaum mit Wix aus, also keine Garantie, dass dies die funktionierende Lösung ist. Ich gebe dir nur ein Beispiel einer vorgeschlagenen Methode, um die Komplexität zu demonstrieren.