Skip to content

feat(#187): login do dono (OTP) + publicar no mural - #288

Draft
Lucas-Belucci-Bellini wants to merge 3 commits into
mainfrom
claude/busy-hopper-9w0zw9
Draft

feat(#187): login do dono (OTP) + publicar no mural#288
Lucas-Belucci-Bellini wants to merge 3 commits into
mainfrom
claude/busy-hopper-9w0zw9

Conversation

@Lucas-Belucci-Bellini

Copy link
Copy Markdown
Owner

🔐 Login do dono (OTP) + publicar no mural

Continuação do #287: agora você loga como operador e publica no mural direto do site. Método escolhido: código OTP de 6 dígitos no e-mail (melhor pra SPA com hash routing).

Como funciona

  • Deslogado: o mural mostra os posts (leitura pública) + uma caixa "Login do operador": e-mail → Enviar código → cola o código → Entrar.
  • Logado como dono: aparece o compositor (nome + recado + Publicar) e o botão Sair. A escrita manda o access_token; o RLS no banco só autoriza o e-mail do dono — qualquer outro é rejeitado.
  • Sessão guardada no storage; getAccessToken() renova via refresh_token.

web = leve

Tudo via Auth REST por fetch (requestOtp/verifyOtp/refresh) em src/core/supabase.js — sem SDK.

⚙️ 1 ajuste seu no painel do Supabase (uma vez)

Pro e-mail mostrar o código (e não só o link mágico): Authentication → Email Templates → Magic Link, inclua {{ .Token }} no corpo. Passo-a-passo + env vars em docs/SUPABASE.md.

Verificação

vite build limpo. No navegador: deslogado → caixa de login renderiza e o feed lê do banco; com sessão do dono (simulada) → compositor + "Sair" aparecem; sem erros de console. O round-trip real do e-mail/código você testa ao vivo (daqui não recebo o e-mail) — por isso não disparei envio de OTP pra não encher sua caixa.

Obs.: o RLS que bloqueia escrita anônima já foi validado no #287 (anon write → 401).

🤖 Generated with Claude Code


Generated by Claude Code

O operador loga por codigo OTP (6 digitos no e-mail) e publica no mural
direto do site; a escrita usa o access_token e o RLS so libera o dono.
Sair encerra a sessao; visitante continua so lendo. Cliente: requestOtp/
verifyOtp/getAccessToken (com refresh) em src/core/supabase.js (Auth
REST por fetch, sem SDK). Requer 1 ajuste no painel (template de e-mail
com {{ .Token }}) -- doc em docs/SUPABASE.md. Verificado: UI de login,
compositor do dono + Sair, feed lendo do banco, sem erros de console.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ch5ibVnhNZG2qGaa83sXd3
@vercel

vercel Bot commented Jun 22, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
projeto-baluarte Ready Ready Preview, Comment Jun 22, 2026 11:29am

CodeQL apontou guardar access_token/refresh_token no localStorage como
clear-text storage de dado sensivel (exfiltravel por XSS). Passa a manter
a sessao SO em memoria (variavel de modulo) -- token nunca vai pro disco.
Custo: relogar ao recarregar a pagina (ok pra publicacao eventual).
Verificado: nada de sb:session no localStorage, login UI e leitura do
mural OK, build limpo.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ch5ibVnhNZG2qGaa83sXd3
CodeQL flagou dado sensivel/PII hardcoded no bundle. O cliente nao
precisa do e-mail do dono: o gating de UI passa a ser 'esta logado' e a
autorizacao REAL continua no RLS do banco (escrita so do e-mail do
operador, no policy server-side). Remove OWNER_EMAIL do src; input de
login sem prefill. Verificado: nenhum e-mail no client, build limpo,
login UI e leitura do mural OK.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ch5ibVnhNZG2qGaa83sXd3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants