From 4214a2561c26575cbf6f93b294a0587ae58ed726 Mon Sep 17 00:00:00 2001 From: Jonas Pacheco Date: Thu, 19 Mar 2026 17:30:40 -0300 Subject: [PATCH] fix(superset): corrige embedding de dashboards via guest token MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - superset_config.py: adiciona FLASK_APP_MUTATOR que seta g.user a partir do Bearer JWT quando o usuário está como anônimo (necessário porque o papel Public com can_read on Dashboard faz protect() pular verificação JWT) - superset_config.py: TALISMAN_ENABLED=False, X_FRAME_OPTIONS=ALLOWALL para permitir embedding cross-origin via iframe - routes.ts: adiciona session cookie nas chamadas de busca do dashboard além de incluir X-CSRFToken + Cookie no guest token request - SupersetDashboard.tsx: usa bi.onboardbi.com.br como supersetDomain, tela de unavailable com UI adequada (sem iframe de fallback) - BiWorkspace.tsx: link "Abrir em Nova Aba" aponta para bi.onboardbi.com.br - docker-compose.prod.yml: labels HTTP→HTTPS redirect para Superset Co-Authored-By: Claude Sonnet 4.6 --- client/src/components/SupersetDashboard.tsx | 32 +++++++++---------- client/src/pages/BiWorkspace.tsx | 2 +- docker-compose.prod.yml | 6 ++++ docker/superset/superset_config.py | 34 +++++++++++++++++++++ server/superset/routes.ts | 34 ++++++++++++++++----- 5 files changed, 83 insertions(+), 25 deletions(-) diff --git a/client/src/components/SupersetDashboard.tsx b/client/src/components/SupersetDashboard.tsx index 954e1ad..7f1c801 100644 --- a/client/src/components/SupersetDashboard.tsx +++ b/client/src/components/SupersetDashboard.tsx @@ -69,7 +69,7 @@ export function SupersetDashboard({ sdkRef.current = await embedDashboard({ id: embeddedId, // UUID do embedded config (não o slug) - supersetDomain: window.location.origin + "/superset", + supersetDomain: "https://bi.onboardbi.com.br", mountPoint: containerRef.current, fetchGuestToken: async () => { const { token } = await fetchTokenData(); @@ -84,14 +84,9 @@ export function SupersetDashboard({ setStatus("ready"); } catch (err: any) { - console.error("[SupersetDashboard] Erro:", err.message); - // Se SDK não estiver instalado, usa iframe como fallback - if (err.message?.includes("Cannot find module") || err.message?.includes("embedDashboard")) { - setStatus("unavailable"); - } else { - setErrorMsg(err.message); - setStatus("error"); - } + console.error("[SupersetDashboard] Erro:", err.message, err); + setErrorMsg(err.message || "Erro desconhecido"); + setStatus("error"); } }, [dashboardId, fetchTokenData]); @@ -106,13 +101,16 @@ export function SupersetDashboard({ if (status === "unavailable") { return ( -
-