Skip to Content
Referencia da APIAutenticacao

Autenticacao

O GoConverso usa o Supabase Auth  para toda a autenticacao. Isso oferece sessoes baseadas em JWT, multiplos provedores OAuth e acesso seguro com controle por linha aos seus dados.

Metodos de autenticacao

O GoConverso suporta os seguintes metodos de autenticacao:

MetodoDescricaoIdeal para
Email e SenhaCadastro e login tradicionaisA maioria dos usuarios
Google OAuthLogin com um clique pelo GoogleOnboarding rapido
OTP (Senha de Uso Unico)Link magico ou codigo de 6 digitos por emailAcesso ao portal do cliente
Chave de API + JWTAcesso programaticoIntegracoes servidor-a-servidor

Chaves de API

Todo projeto GoConverso possui duas chaves de API:

Chave anon (publica)

A chave anon e segura para uso em codigo do lado do cliente. Ela respeita as politicas de Row Level Security, ou seja, os usuarios so podem acessar dados que estao autorizados a ver.

apikey: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Chave service role (secreta)

A chave service role ignora todas as politicas de RLS e concede acesso total ao banco de dados. Use-a apenas em codigo do lado do servidor, edge functions ou ambientes de backend seguros.

Nunca exponha a chave service role em codigo do lado do cliente. Esta chave tem acesso irrestrito a todo o seu banco de dados, incluindo todos os dados de usuarios. Armazene-a em variaveis de ambiente e use-a apenas em contextos do lado do servidor.

Tokens JWT

Quando um usuario faz login, o Supabase emite um JSON Web Token (JWT) que contem o ID do usuario, email e metadados. Este token e usado para autenticar requisicoes subsequentes da API.

Estrutura do token

Um JWT decodificado do GoConverso contem:

{ "sub": "550e8400-e29b-41d4-a716-446655440000", "email": "user@example.com", "role": "authenticated", "aud": "authenticated", "exp": 1706540400, "iat": 1706536800, "user_metadata": { "full_name": "Maria Silva", "username": "mariasilva", "niche": "barber" } }

Ciclo de vida do token

EventoComportamento
LoginToken de acesso + token de atualizacao emitidos
Token de acesso expiraAtualizado automaticamente usando o token de atualizacao (padrao: 1 hora)
Token de atualizacao expiraUsuario precisa fazer login novamente (padrao: 7 dias)
LogoutAmbos os tokens sao invalidados

Autenticando requisicoes

Toda requisicao da API deve incluir dois cabecalhos:

curl -X GET "https://<project-id>.supabase.co/rest/v1/bookings" \ -H "apikey: <your-anon-key>" \ -H "Authorization: Bearer <jwt-access-token>" \ -H "Content-Type: application/json"
  • apikey — identifica seu projeto (use a chave anon)
  • Authorization — identifica o usuario autenticado (use o token de acesso JWT)

Cadastro com email e senha

Criar a conta do usuario

const { data, error } = await supabase.auth.signUp({ email: 'newuser@example.com', password: 'secure-password-123', options: { data: { full_name: 'New User', username: 'newuser', niche: 'personal_trainer' } } })

Tratar a resposta

Em caso de sucesso, a resposta inclui o novo objeto de usuario e uma sessao:

{ "user": { "id": "550e8400-e29b-41d4-a716-446655440000", "email": "newuser@example.com", "user_metadata": { "full_name": "New User", "username": "newuser", "niche": "personal_trainer" } }, "session": { "access_token": "eyJhbGciOiJIUzI1NiIs...", "refresh_token": "v1.MjA5Nj...", "expires_in": 3600 } }

Criacao automatica do perfil

O GoConverso cria automaticamente uma linha na tabela profiles quando um novo usuario se cadastra. Isso e feito por um trigger do banco de dados, entao nenhuma chamada adicional a API e necessaria.

Login com email e senha

const { data, error } = await supabase.auth.signInWithPassword({ email: 'user@example.com', password: 'secure-password-123' }) if (error) { console.error('Sign in failed:', error.message) return } // Access token for API requests const accessToken = data.session.access_token

OAuth com Google

O GoConverso suporta Google OAuth para login com um clique. Este e o metodo recomendado para a experiencia de onboarding mais rapida.

Iniciar o fluxo OAuth

const { data, error } = await supabase.auth.signInWithOAuth({ provider: 'google', options: { redirectTo: 'https://converso.pro/auth/callback', queryParams: { access_type: 'offline', prompt: 'consent' } } })

Tratar o callback

Apos o usuario autorizar seu aplicativo, ele e redirecionado para a URL de callback com um codigo de autorizacao. O cliente Supabase automaticamente troca isso por uma sessao.

// In your callback page (e.g., /auth/callback) const { data: { session }, error } = await supabase.auth.getSession() if (session) { // User is authenticated console.log('Signed in as:', session.user.email) }

Acessar o Google Calendar (opcional)

Se voce precisa de integracao com o Google Calendar, solicite escopos adicionais durante o fluxo OAuth:

const { data, error } = await supabase.auth.signInWithOAuth({ provider: 'google', options: { redirectTo: 'https://converso.pro/auth/callback', scopes: 'https://www.googleapis.com/auth/calendar.events' } })

Autenticacao OTP (Portal do Cliente)

O GoConverso usa autenticacao baseada em OTP para o portal do cliente. Os clientes recebem um codigo de 6 digitos por email para acessar o portal sem precisar de senha.

// Request OTP const response = await fetch( 'https://<project-id>.supabase.co/functions/v1/send-portal-otp', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email: 'client@example.com', professionalId: '<professional-uuid>' }) } ) // Verify OTP const verify = await fetch( 'https://<project-id>.supabase.co/functions/v1/verify-portal-otp', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email: 'client@example.com', code: '123456', professionalId: '<professional-uuid>' }) } )

Os codigos OTP expiram apos 10 minutos e so podem ser usados uma vez. Se um cliente solicitar um novo codigo, quaisquer codigos emitidos anteriormente sao automaticamente invalidados.

Gerenciamento de sessoes

A biblioteca cliente do Supabase gerencia as sessoes automaticamente, incluindo a atualizacao de tokens. Voce pode escutar mudancas no estado de autenticacao:

supabase.auth.onAuthStateChange((event, session) => { switch (event) { case 'SIGNED_IN': console.log('User signed in:', session.user.email) break case 'SIGNED_OUT': console.log('User signed out') break case 'TOKEN_REFRESHED': console.log('Token refreshed') break } })

Logout

const { error } = await supabase.auth.signOut()

Melhores praticas de seguranca

  • Armazene tokens de forma segura — Use cookies httpOnly ou armazenamento seguro. Nunca armazene JWTs no localStorage para aplicacoes sensiveis.
  • Use a chave anon no cliente — A chave anon e limitada pelas politicas de RLS. Nunca use a chave service role em codigo do navegador.
  • Valide tokens no servidor — Se voce construir endpoints personalizados, verifique a assinatura do JWT usando o segredo JWT do seu projeto.
  • Ative RLS em todas as tabelas — O GoConverso tem RLS ativado por padrao. Nunca desative sem entender as implicacoes.
  • Rotacione chaves periodicamente — Se voce suspeitar que uma chave foi comprometida, rotacione-a imediatamente no painel do Supabase.

Em seguida, aprenda como trabalhar com Webhooks para receber notificacoes de eventos em tempo real.