Instalando Discourse em um VPS auto-hospedado. Um processo com FAQs

como eu disse acima:

e aqui você postou:

o que você sabe sobre o MiniOrange? o plano gratuito parece ser limitado a apenas alguns usuários, e assim pode ficar caro para você a $49/mês para o plano básico:

pesquisa e leitura cuidadosa são essenciais ao planejar o que você deseja alcançar.

você sabe como escrever um script Velo para o Wix?

talvez uma solução em JavaScript

eu acho que você precisará configurar um endpoint de API personalizado diretamente no seu site Wix para receber as solicitações de login do Discourse. parece que isso exigirá código JavaScript em um módulo Velo com um arquivo chamado http-functions.js.

isso interceptará o usuário do Discourse, redirecionará e verificará sua sessão de login no Wix, gerará uma carga útil assinada e, esperançosamente, os enviará de volta com segurança ao fórum.

algo como isso talvez:

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

// escolha uma string aleatória segura para o segredo 

const DISCOURSE_SECRET = "YOUR_SUPER_SECRET_STRING_HERE"; 

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

    if (!payload || !sig) {
        return badRequest({ body: "Parâmetros SSO ausentes" });
    }

    // valide a assinatura recebida do Discourse

    const computedSig = crypto.createHmac('sha256', DISCOURSE_SECRET).update(payload).digest('hex');
    if (computedSig !== sig) {
        return badRequest({ body: "Assinatura criptográfica inválida" });
    }

    // verifique se o usuário está logado no Wix

    const member = await currentMember.getMember({ fieldsets: ['FULL'] });
    
    // analise a carga útil recebida para recuperar o nonce de rastreamento exclusivo

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

    if (!member) {
        // Se não estiver logado, force-o a fazer login no Wix primeiro, depois retorne aqui
        const loginUrl = `https://yourwixsite.com{encodeURIComponent(request.url)}`;
        return redirect(loginUrl);
    }

    // construa a carga útil do usuário para o 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)}`;

    // criptografe e assine a carga útil do usuário
    const base64Payload = Buffer.from(userPayload).toString('base64');
    const returnSig = crypto.createHmac('sha256', DISCOURSE_SECRET).update(base64Payload).digest('hex');

    // redirecione-os de volta ao Discourse como um usuário logado
    const discourseReturnUrl = `https://yourforum.com{encodeURIComponent(base64Payload)}&sig=${returnSig}`;
    return redirect(discourseReturnUrl);
}

você também precisará substituir a URL do seu fórum lá

também haverá alguma configuração do DiscourseConnect, mas não faça nenhuma dessas coisas até que você tenha um fórum auto-hospedado funcionando sem erros.

eu não sou especialista em nenhuma dessas coisas e mal sei algo sobre o Wix, então não há garantias de que essa seja a solução funcional. eu só estou dando um exemplo de um método proposto para demonstrar a complexidade.