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.