window não existe. Duas coisas resolvem isso, e a segunda
é a que costuma passar despercebida.
Pré-requisitos
- Node.js 20 ou superior.
- Uma
sdkUrlemitida pelo seu backend, como no passo 6. - O guia de React — o hook é o mesmo, e a declaração de tipos também.
Monte o fluxo
1
Carregue o SDK no layout
app/layout.tsx
beforeInteractive só é aceito em app/layout.tsx, e é o que garante que window.Legitimuz
existe antes de qualquer efeito de componente cliente rodar. Veja a armadilha abaixo.2
Isole o widget num Client Component
components/VerificationWidget.tsx
"use client" precisa ser a primeira linha do arquivo: um prólogo de diretiva não pode
vir depois de um comentário. Sem ele, este componente tentaria rodar na renderização do
servidor, onde window não existe.3
Mantenha a página no servidor
app/page.tsx
"use client" aqui. A página continua Server Component e passa a sdkUrl como prop, como
faria com qualquer outro filho.4
Configure a sdkUrl
.env.local
NEXT_PUBLIC_ é obrigatório: o valor precisa chegar ao navegador, e
process.env.LEGITIMUZ_SDK_URL sem prefixo seria undefined no componente cliente.Numa integração real, a sdkUrl não vem de variável de ambiente — ela é emitida por
verificação. Busque-a num Server Component ou numa Route Handler e passe como prop.Confira que funcionou
A primeira tela aparece dentro do container. No console do servidor não deve haver nenhum erro dewindow is not defined.
A armadilha deste framework
Próximo passo
React
O hook completo, com tipos e o cuidado com o StrictMode.
7. Testar
Rode a jornada ponta a ponta e veja a decisão chegar.