Installazione di Discourse su un VPS self-hosted: un processo con FAQ

come ho detto sopra:

e qui hai pubblicato:

che cosa sai su MiniOrange? il piano gratuito sembra essere limitato a pochi utenti, e quindi potrebbe diventare costoso per te a 49$/mese per il piano base:

la ricerca e la lettura attenta sono essenziali quando si pianifica ciò che si vuole raggiungere.

sai scrivere uno script Velo per Wix?

forse una soluzione javascript

penso che dovrai impostare un endpoint API personalizzato direttamente sul tuo sito Wix per ricevere le richieste di login da Discourse. sembra che richiederà codice javascript in un modulo Velo con un file chiamato http-functions.js.

questo intercetterà l’utente da Discourse, reindirizzerà e verificherà la loro sessione Wix collegata, genererà un payload firmato e poi sperabilmente li passerà in sicurezza nel forum.

qualcosa del genere forse:

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

// scegli una stringa casuale sicura per il segreto 

const DISCOURSE_SECRET = "LA_TUA_STRINGA_SUPER_SEGRETA_QUI"; 

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

    if (!payload || !sig) {
        return badRequest({ body: "Parametri SSO mancanti" });
    }

    // valida la firma in arrivo da Discourse

    const computedSig = crypto.createHmac('sha256', DISCOURSE_SECRET).update(payload).digest('hex');
    if (computedSig !== sig) {
        return badRequest({ body: "Firma crittografica non valida" });
    }

    // controlla se l'utente è collegato a Wix

    const member = await currentMember.getMember({ fieldsets: ['FULL'] });
    
    // analizza il payload in arrivo per recuperare il nonce di tracciamento univoco

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

    if (!member) {
        // Se non è collegato, forzalo a collegarsi a Wix prima, poi torna qui
        const loginUrl = `https://iltuositowix.com{encodeURIComponent(request.url)}`;
        return redirect(loginUrl);
    }

    // costruisci il payload utente per 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)}`;

    // crittografa e firma il payload utente
    const base64Payload = Buffer.from(userPayload).toString('base64');
    const returnSig = crypto.createHmac('sha256', DISCOURSE_SECRET).update(base64Payload).digest('hex');

    // reindirizzali a Discourse come utente collegato
    const discourseReturnUrl = `https://iltuoforum.com{encodeURIComponent(base64Payload)}&sig=${returnSig}`;
    return redirect(discourseReturnUrl);
}

dovrai anche sostituire l’URL del tuo forum lì

ci sarà anche una configurazione DiscourseConnect ma non fare nessuna di queste cose finché non hai un forum auto-hosted effettivamente attivo e funzionante senza errori.

non sono un esperto di nessuna di queste cose e conosco a malapena Wix, quindi nessuna garanzia che questa sia la soluzione funzionante. sto solo fornendoti un esempio di un metodo proposto per dimostrare la complessità.