Vibe Coding — a tua primeira app sem saber programar — 6. Contas de utilizador & login

20 min read min de lecture
Capítulo 06

Contas de utilizador & login

Capítulo 6 de 10 · 60%

Objetivos deste capítulo

  • Compreender quando uma conta de utilizador se torna realmente necessária
  • Escolher um método de login adaptado aos teus utilizadores
  • Integrar a autenticação via um serviço pronto a usar, sem programar

A mensagem que muda tudo

Uma semana depois da publicação online, o Tom recebe o feedback que mais se repete. A Lina, uma aluna do 7.º ano, escreve-lhe: «Professor, marquei todos os meus hábitos no computador da biblioteca, e à noite no meu telemóvel tinha desaparecido tudo!» O Tom percebe imediatamente: tinha escolhido o armazenamento local no capítulo 3, e o localStorage guarda os dados no navegador de cada aparelho. O computador da biblioteca e o telemóvel da Lina são dois mundos separados que não falam entre si. Para que a app siga a Lina para todo o lado, tem de poder reconhecê-la — e reconhecer alguém, na web, chama-se uma conta de utilizador.

Lembra-te: no capítulo 3, «conta de utilizador» figurava na lista das palavras-armadilha a banir da tua v1. Não era uma proibição definitiva, era uma questão de timing. O Tom primeiro construiu, implementou, e recolheu feedback real. Agora, a necessidade já não é uma hipótese: é o pedido número um dos seus utilizadores. É exatamente a ordem certa — a complexidade justifica-se por uma necessidade provada, nunca por um «por via das dúvidas». Vais ver que esta complexidade, bem abordada, está perfeitamente ao teu alcance.

Autenticação: o que se passa realmente

Três palavras de vocabulário vão transformar os teus diálogos com a IA sobre este assunto. A autenticação é provar quem és («sou mesmo a lina@escola.pt»). A sessão é continuar reconhecido durante algum tempo sem ter de o provar a cada clique — é ela que faz com que não tenhas de te voltar a ligar a cada trinta segundos. A autorização é o que tens o direito de ver ou de fazer depois de reconhecido («a Lina vê OS hábitos dela, não os dos outros»). Quando usares estas palavras nos teus prompts, a IA saberá exatamente de que falas.

Por trás de um simples ecrã de login esconde-se na realidade todo um sistema: o registo, o login, o logout, a recuperação em caso de esquecimento, a proteção contra robôs, o armazenamento seguro das credenciais… Construir tudo isto sozinho é demorado e, sobretudo, perigoso: o mínimo erro expõe os dados dos teus utilizadores. A boa notícia é que ninguém o constrói sozinho hoje em dia — nem mesmo os profissionais. Toda a gente se apoia em serviços especializados que resolveram o problema de uma vez por todas.

Se a IA te propuser um dia «criar um sistema de login caseiro» com uma tabela de palavras-passe, recusa educadamente e pede explicitamente um serviço de autenticação reconhecido. Guardar palavras-passe por conta própria é o erro de segurança número um dos iniciantes — e é inteiramente evitável.

Os serviços de autenticação prontos a usar

Estes serviços chamam-se por vezes BaaS (Backend as a Service): fornecem à tua app os tijolos de servidor de que ela precisa — incluindo a autenticação — sem que tenhas de gerir um servidor. Crias uma conta neles, recuperas duas chaves, e a tua app delega-lhes todo o trabalho sensível. Três nomes aparecem em todo o lado, e a IA conhece-os de cor:

Supabaseopen source, generoso na oferta gratuita, e combina autenticação E base de dados — prático para o capítulo seguinte. A escolha do Tom.
Firebaseo serviço da Google, muito difundido e muito documentado. Também excelente, com um ecossistema um pouco mais orientado para a Google.
Clerkespecializado a 100 % em autenticação, com ecrãs de login já feitos e muito cuidados. Ideal se quiseres o resultado mais bonito o mais depressa possível.

Para este curso, seguiremos o Tom no Supabase: a oferta gratuita cobre largamente uma app de turma, e o facto de ter a autenticação e a base de dados no mesmo sítio vai simplificar o capítulo 7. Mas retém o princípio mais do que o nome — o método que vais aprender aplica-se tal e qual nos concorrentes.

Que método de login para os teus utilizadores?

Existem três grandes formas de fazer login, e a boa escolha depende inteiramente de quem são os teus utilizadores. A palavra-passe clássica é universal mas penosa: as pessoas esquecem-na, reutilizam-na em todo o lado, e é preciso gerir a recuperação. O login via Google ou Apple («OAuth») é confortável… desde que os teus utilizadores tenham uma conta Google que usem realmente. O link mágico (magic link) elimina pura e simplesmente a palavra-passe: o utilizador escreve o email, recebe um link, clica, e fica ligado.

  • Palavra-passe: universal, mas esquecimentos frequentes e gestão de recuperação obrigatória.
  • Login Google / Apple: um clique e está feito — se os teus utilizadores tiverem (e usarem) essas contas.
  • Link mágico: nada para decorar, nada para esquecer. Perfeito para utilizadores ocasionais ou jovens. Única exigência: aceder à caixa de email.

O Tom escolhe o link mágico: os alunos têm todos um endereço fornecido pela escola, e «palavra-passe esquecida» teria-se tornado a segunda vida dele. Faz-te a mesma pergunta para a tua própria app: que método cria menos fricção para OS TEUS utilizadores? Não há uma boa resposta universal, apenas uma boa resposta para o teu público.

sequenceDiagram
  participant E as Aluno
  participant A as App do Tom
  participant S as Serviço Supabase
  E->>A: Escreve o seu endereço de email
  A->>S: Pede um link mágico
  S-->>E: Envia o email com o link
  E->>A: Clica no link recebido
  A-->>E: Sessão aberta e hábitos mostrados
O fluxo do link mágico: sem palavra-passe, apenas um email e um clique.

Integrar a autenticação com a IA

O percurso cabe em três tempos: criar o teu projeto no Supabase (uma conta, um clique em «New project»), recuperar as tuas duas chaves de acesso, e depois pedir à IA que ligue tudo. Tal como na implementação do capítulo 5, não tens de memorizar o procedimento — pedes um acompanhamento passo a passo adaptado ao teu nível. Eis o prompt completo do Tom:

PROMPT
Quero adicionar contas de utilizador à minha app de acompanhamento de hábitos.
Contexto: app HTML/CSS/JS implementada na Vercel, dados em localStorage por enquanto.
Usa o Supabase Auth com login por link mágico, sem palavra-passe.
O que quero:
1. um ecrã de login simples: campo de email + botão «receber o meu link»
2. depois do clique no link recebido por email, o utilizador volta à app, ligado
3. um botão «terminar sessão» discreto no topo da página
4. se o utilizador não estiver ligado, vê o ecrã de login; senão, os seus hábitos
IMPORTANTE: não toques ainda nos dados — mantemos o localStorage por enquanto.
Guia-me primeiro para criar o projeto Supabase e encontrar as minhas duas chaves, passo a passo, antes de escrever uma única linha de código.

A linha «não toques ainda nos dados» é estratégica. Adicionar a autenticação E migrar os dados ao mesmo tempo são duas grandes mudanças de uma vez — exatamente o que o capítulo 4 te ensinou a evitar. Este capítulo liga o reconhecimento dos utilizadores; o capítulo 7 ocupar-se-á dos dados deles. Um degrau de cada vez, mesmo quando a escada é grande.

As chaves de API: os teus primeiros segredos

Ao criar o teu projeto Supabase, vais encontrar duas chaves. A chave pública (dita «anon») identifica a tua app: pode viver no código do navegador, foi feita para isso. A chave secreta (dita «service_role») dá TODOS os direitos sobre o teu projeto: nunca, mas nunca, deve aparecer em código visível por um navegador. Estes segredos arrumam-se num ficheiro especial, o .env, que o Git ignora:

bash
# Ficheiro .env — fica na tua máquina, nunca publicado
SUPABASE_URL=https://oteuprojeto.supabase.co
SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIs...   # pública: OK no navegador
SUPABASE_SERVICE_ROLE_KEY=eyJzZXJ2aWNl...   # SECRETA: nunca no navegador
Na dúvida, faz a pergunta tal e qual à IA: «esta chave pode aparecer no código do navegador, sim ou não?». É uma pergunta binária, ela responderá sem ambiguidade. Voltaremos a falar dos segredos em profundidade no capítulo 9 — por enquanto, retém: a chave service_role nunca sai do servidor.

Testar o fluxo como um utilizador

A autenticação testa-se de ponta a ponta, sem atalhos: escreve um endereço verdadeiro, vai buscar o email (olha também no spam, é o bloqueio clássico), clica no link, verifica que chegas ligado. Depois termina a sessão e recomeça. Por fim, o teste decisivo: abre a app em dois navegadores diferentes com dois endereços diferentes, e verifica que cada um tem a sua própria sessão. Se algo encravar, aplica o método do capítulo 4 — relatório de bug em quatro pontos. Eis a versão adaptada à autenticação:

PROMPT
Bug de login a corrigir.
O que faço: escrevo o meu endereço, recebo o email do link mágico, clico no link.
O que esperava: voltar à app, ligado.
O que acontece: volto à app mas continuo a ver o ecrã de login.
Erro na consola: [cola aqui a linha vermelha exata, se existir]
Verifica em prioridade a configuração dos URL de redirecionamento no Supabase — o URL do meu site implementado é https://minha-app.vercel.app — e diz-me o que corrigir, passo a passo.

Este prompt mostra um reflexo de nível superior: o Tom orienta o diagnóstico («verifica em prioridade os URL de redirecionamento») porque é A causa clássica deste sintoma — o serviço reenvia o utilizador para um endereço que não corresponde ao site implementado. Não és obrigado a conhecer estas causas clássicas: pergunta à IA «quais são as três causas mais frequentes deste problema?» e ela lista-tas.

Os endereços de email dos teus utilizadores são dados pessoais — tanto mais sensíveis quanto os alunos do Tom são menores. Regra de ouro: recolhe apenas o estritamente necessário (aqui, o email e nada mais), e se a tua app for usada em contexto escolar, fala com a tua escola. A sobriedade nos dados é ao mesmo tempo uma obrigação e uma proteção.

O que te espera no próximo capítulo

No fim desta etapa, a app do Tom reconhece cada aluno… mas os hábitos deles ainda vivem no localStorage de cada aparelho. A Lina pode ligar-se na biblioteca e no telemóvel, mas ainda não vê lá os mesmos dados. Falta a segunda metade da solução: uma base de dados online, onde os hábitos de cada conta serão guardados de uma vez por todas, acessíveis de qualquer lado. É todo o programa do capítulo 7 — e já assentaste a fundação ideal para a receber.

🛠️ É a tua vez

Contexto

O Tom reserva uma noite para adicionar o login por link mágico à app dele. O objetivo é voluntariamente limitado: no fim da sessão, um aluno deve poder ligar-se e desligar-se — sem tocar nos dados, que ficam em localStorage. Faz exatamente o mesmo trabalho na tua app: é o primeiro tijolo «a sério» do teu percurso, e vais ver que é mais acessível do que parece.

Instruções

  1. Cria uma conta Supabase (ou Firebase/Clerk) e um novo projeto, e depois localiza as tuas duas chaves.
  2. Escolhe o teu método de login segundo OS TEUS utilizadores: link mágico, palavra-passe ou Google.
  3. Envia à IA o prompt de integração precisando bem «não toques ainda nos dados».
  4. Testa o fluxo completo: registo, email recebido (verifica o spam), login, logout, novo login.
  5. Abre a app em dois navegadores com dois endereços diferentes e verifica que as sessões estão bem separadas.
  6. Quando tudo funcionar, faz um commit (ou um ponto de restauro): «autenticação funcional».
Dica — Se o link mágico te devolver ao ecrã de login em vez de te ligar, é quase sempre um problema de URL de redirecionamento na configuração do Supabase: o URL do teu site implementado deve lá figurar exatamente. Dá esta pista à IA em primeiro lugar.

Em resumo

  • localStorage = dados por aparelho; para seguir um utilizador para todo o lado, é precisa uma conta.
  • A complexidade de uma conta justifica-se por uma necessidade de utilizador provada — nunca por um «por via das dúvidas».
  • Autenticação = provar quem és; sessão = continuar reconhecido; autorização = o que tens o direito de ver.
  • Nunca se constrói o próprio sistema de palavras-passe: o Supabase, o Firebase ou o Clerk encarregam-se disso.
  • O link mágico elimina as palavras-passe: ideal para utilizadores jovens ou ocasionais.
  • Chave pública «anon»: OK no navegador; chave «service_role»: nunca — vive no .env.
  • Separa os trabalhos: este capítulo liga a autenticação, o seguinte migrará os dados.

Quiz — verifica a tua compreensão

1. Porque é que os dados da Lina desaparecem de um aparelho para outro?

O localStorage é local por definição: cada navegador tem a sua própria cópia, e nada circula entre os aparelhos. É todo o problema que as contas + base de dados vão resolver.

2. Qual é a diferença entre autenticação e autorização?

Primeiro reconhecem-te (autenticação), depois aplicam os teus direitos (autorização): a Lina vê os hábitos dela, não os dos outros.

3. A IA propõe-te criar uma tabela de palavras-passe caseira. O que fazes?

Guardar palavras-passe por conta própria é o erro de segurança clássico do iniciante. Os serviços especializados resolveram este problema de forma segura — delega-lhes este trabalho sensível.

4. Porque é que o Tom escolhe o link mágico para os alunos?

O bom método de login é o que cria menos fricção para OS TEUS utilizadores. Para alunos equipados com um email escolar, zero palavras-passe = zero «palavra-passe esquecida».

5. Qual destas chaves NUNCA deve aparecer no código do navegador?

A chave service_role dá todos os direitos sobre o teu projeto. Vive no .env, apenas do lado do servidor. A chave anon, essa, foi concebida para ser visível no navegador.

Auteur(s)

R

REHOUMA Haythem

Haythem Rehouma est un ingénieur et architecte IA et cloud, formateur et enseignant technique, avec un profil orienté IA médicale, AWS, MLOps, LLM/RAG et vision par ordinateur.