KasyKasy

Autenticação

Login anônimo, Google, Apple e Facebook. O que a CLI configura e o que você faz manualmente.

Implementação

Google Sign-In

No kasy new, a CLI inclui Google no scaffold (Firebase e Supabase). Com companion Firebase (push no Supabase/API, ou backend Firebase), ela também minta OAuth e registra credenciais. Sem companion, o provedor já fica Enabled no Supabase Auth (como Apple); falta colar Client ID/Secret (kasy google / configure_google_login).

Firebase

O kasy new roda firebase deploy --only auth, que cria o OAuth Web Client e ativa Google (e Anônimo + Email/Senha) no Firebase Auth. O app autentica direto pelo Firebase Auth.

Na web, a CLI também:

  • registra no Google Cloud os redirect URIs firebaseapp.com e web.app
  • ajusta authDomain em firebase_options para SEU_PROJETO.web.app (same-origin no Hosting padrão; importante no navegador embutido da IDE)

Depois, confira com:

kasy doctor

O kasy doctor avisa se o SHA-1 do debug keystore não estiver cadastrado no Android.

Supabase

Login Google é 100% Supabase Auth. O app não usa firebase_auth. Não é necessário companion Firebase só por causa do Google.

No modo Rápido a CLI pergunta se você quer push e se quer Google (terminal interativo). No MCP / kasy new --yes, Google vem ligado por padrão (independente do push; use --no-google / noGoogle só para email-only):

  • Push sim + Google sim: companion Firebase (FCM gratuito) + mint OAuth + SHA-1 no app Android do Firebase + provider no Supabase. Você não cria client OAuth Android na mão: Firebase + SHA-1 já amarram o login nativo.
  • Push não + Google sim: scaffold inclui Google. Terminal interativo pede o paste do Client ID/Secret e registra credenciais no Supabase Auth. MCP / --yes: provedor Enabled no create (como Apple) + placeholders; kasy google / configure_google_login depois para Client ID/Secret.

Sem companion (checklist no Console): projeto GCP separado (cota de org / faturamento obrigatório na org é regra do GCP, não cobra OAuth em Testing) → branding OAuth (Externo, Enter no e-mail de contato) → client Web em Visão geral de OAuth → redirect https://SEU_REF.supabase.co/auth/v1/callback → usuários de teste → copiar Client ID + Secret em texto puro (kasy google ou MCP configure_google_login grava no Supabase automaticamente).

Companion Firebase também entra no Advanced com push ou em kasy add notifications.

PlataformaFluxo
WebsignInWithOAuth via Supabase
iOS / Androidgoogle_sign_in + signInWithIdToken no Supabase

Web (produção)

Adicione o domínio de produção em Supabase → Authentication → URL Configuration (Redirect URLs). No dev, o kasy new já libera http://localhost:5555.

Para Firebase, adicione também as origens no OAuth Client (Google Cloud Console → Credenciais → Web client):

Origins autorizadas no OAuth Client do Google Cloud Console
Google Cloud Console: Authorized JavaScript origins com localhost:5555 e o domínio de produção

Apple Sign-In

Requer conta Apple Developer (paga, USD $99/ano).

Se o seu app oferece login social, o Sign in with Apple deixa de ser opcional. A diretriz 4.8 de revisão da App Store exige que todo app que usa login de terceiro (Google, Facebook, X, LinkedIn) para criar a conta principal ofereça também um serviço de login equivalente que limite a coleta ao nome e e-mail, permita esconder o e-mail e não use as interações para publicidade. O Sign in with Apple atende os três.

Ter e-mail e senha não isenta: a exceção da diretriz vale só para apps que usam exclusivamente o próprio sistema de contas. Como o kit já traz Google, a regra se aplica. Publicar sem o botão da Apple costuma voltar como recusa na revisão.

Não se aplica a apps de educação/empresa com conta corporativa, identidade digital governamental, ou clientes de um serviço específico de terceiro.

1. Ativar capability no Bundle ID

  1. Abra Identifiers
  2. Selecione seu Bundle ID
  3. Ative Sign In with Apple → Enable as a primary App ID → Save

2. Criar chave

  1. Abra Keys
  2. Clique em + → dê um nome (ex: Firebase Sign In with Apple)
  3. Ative Sign In with Apple → Configure → selecione seu Bundle ID → Save
  4. Registre → baixe o .p8 (só é possível baixar uma vez, guarde em lugar seguro)
  5. Anote o Key ID (ex: 6RR89XG535)

3. Criar ou editar o Services ID (web)

O login Apple na web usa um Services ID (com.empresa.app.signin). Não é o App ID do iOS (com.empresa.app).

  1. Abra Identifiers ou direto Services IDs
  2. Filtro: a página abre em App IDs. No dropdown superior direito, mude para Services IDs
  3. Se não existe: + → Services IDs → Continue
  4. Description: Firebase Sign In with Apple · Identifier: SEU_BUNDLE_ID.signin
  5. Registre → abra o Services ID → Sign In with Apple → Configure → Primary App ID: seu Bundle ID

Domains e Return URLs (vírgula na mesma linha):

BackendDomainsReturn URLs
FirebaseSEU_PROJETO.firebaseapp.com, SEU_PROJETO.web.apphttps://SEU_PROJETO.firebaseapp.com/__/auth/handler, https://SEU_PROJETO.web.app/__/auth/handler
SupabaseSEU_PROJECT_REF.supabase.cohttps://SEU_PROJECT_REF.supabase.co/auth/v1/callback

O portal Apple pede vírgula na mesma linha, não uma URL por linha. Linhas separadas geram One or more domains are invalid e o Next fica cinza.

  1. Next → Done → Continue → Save
Criação do Services ID no portal Apple Developer
Apple Developer: Services ID com Sign In with Apple ativado e Return URL do Firebase

4. Configurar no Firebase

  1. Abra Firebase Console → Authentication → Apple
  2. Ative o provedor Apple
  3. Preencha em Configuração do fluxo de código OAuth:
    • Services ID: o identifier do passo 3 (ex: com.empresa.app.signin)
    • Team ID: encontrado em Membership Details
    • ID da chave: o Key ID do passo 2
    • Chave privada: conteúdo completo do .p8 (incluindo as linhas -----BEGIN PRIVATE KEY----- e -----END PRIVATE KEY-----)
  4. Salvar

5. Ativar capability no Xcode

  1. Abra ios/Runner.xcworkspace no Xcode
  2. Target Runner → Signing & Capabilities → + Capability → adicione Sign In with Apple

iOS / macOS: o botão Apple aparece automaticamente após os passos acima.

Android: o botão Apple fica escondido por padrão (Apple não oferece login nativo no Android para apps SaaS comuns).

Na web o botão aparece por dispositivo, não por navegador. O kit lê o user agent: iPhone, iPad e Mac mostram o botão da Apple em qualquer navegador (Safari, Chrome, Firefox). Android, Windows e Linux ficam sem ele, de propósito.

O efeito colateral: usuário que troca de aparelho fica trancado. Quem criou a conta com Sign in with Apple no iPhone e depois abre o app (ou o site) no Android não encontra o botão em lugar nenhum, e não existe "esqueci a senha" para conta social.

Se o seu app vai para as duas lojas, decida conscientemente: ou você avisa na tela de login que aquela conta só entra por aparelho Apple, ou oferece um segundo método (e-mail) no cadastro para o usuário ter como voltar.

Web (Firebase): após os passos 1 a 4, rode kasy apple-web, ou, pelo MCP, peça ao assistente "configura o Apple Sign In na web" (ele roda configure_apple_web). Ele grava o Services ID, Team ID, Key ID e .p8 no provedor Apple do Firebase e liga withAppleWebSignin no app. O Services ID precisa dos dois domínios e duas Return URLs (firebaseapp.com e web.app).

Web (Supabase): mesmos passos 1 a 3 na Apple Developer, mas o Return URL do Services ID é https://SEU_PROJETO.supabase.co/auth/v1/callback (domain SEU_PROJETO.supabase.co, não Firebase Hosting). Depois rode kasy apple-web para assinar o secret e gravar no Supabase (expira ~6 meses).

Facebook Sign-In

Requer conta no Meta for Developers.

Atalho: após criar e configurar o app na Meta (passos 1 a 5), rode kasy facebook, ou, pelo MCP, peça "configura o Facebook Login" (tool configure_facebook_login). Ele grava as credenciais no Info.plist, strings.xml e no Firebase/Supabase automaticamente. Veja MCP do Kasy.

1. Criar app no Meta

  1. Abra Meta for Developers → My Apps
  2. Clique em Create App → selecione Consumer → Next
  3. Preencha o nome do app → Create App
  4. No painel do app, anote o App ID e o Client Token (Settings → Advanced → Client Token)

2. Ativar Facebook Login

  1. No painel do app Meta → Add Product → Facebook Login → Set Up → iOS e/ou Android
  2. iOS: informe o Bundle ID do seu app

3. iOS: atualizar Info.plist

Edite ios/Runner/Info.plist e substitua os placeholders:

<key>FacebookAppID</key>
<string>SEU_APP_ID</string>
<key>FacebookClientToken</key>
<string>SEU_CLIENT_TOKEN</string>
<key>FacebookDisplayName</key>
<string>Nome do seu app</string>

E o URL scheme (dentro de CFBundleURLTypes):

<string>fbSEU_APP_ID</string>

4. Android: atualizar strings.xml

Edite android/app/src/main/res/values/strings.xml e substitua os placeholders:

<string name="facebook_app_id">SEU_APP_ID</string>
<string name="facebook_client_token">SEU_CLIENT_TOKEN</string>

5. Web: adicionar domínio no Meta

  1. No painel do app Meta → Facebook Login → Settings
  2. Em Valid OAuth Redirect URIs, adicione:
    • Backend Firebase (as duas):
      • https://SEU_PROJETO.firebaseapp.com/__/auth/handler
      • https://SEU_PROJETO.web.app/__/auth/handler
    • Backend Supabase: https://SEU_PROJETO.supabase.co/auth/v1/callback
  3. Em Allowed Domains for the JavaScript SDK, adicione os domínios do app (firebaseapp.com e web.app no Firebase; seu host web no Supabase)

Depois rode kasy facebook para aplicar automaticamente ou rode kasy doctor para verificar.

Informações

Como o login funciona no app

Mobile (padrão): conta anônima

Ao abrir o app no nativo, uma conta anônima é criada automaticamente. O usuário entra direto na Home. Depois pode vincular um e-mail ou conta social em Configurações, sem perder dados.

App abre → conta anônima → onboarding → Home
Usuário quer conta real → /signin → vincula à anônima existente

Firebase: exige provider Anônimo ativo no Firebase Auth e kasy deploy antes do primeiro boot.

Supabase: o kasy new ativa anônimo automaticamente no config.toml (enable_anonymous_sign_ins = true). Nada para fazer no dashboard.

Supabase (painel): em Authentication → Users, o dropdown da busca pode estar em Email address. Anônimos não têm e-mail e somem da lista. Use Unified search ou busque pelo User ID copiado de public.users. Ver Troubleshooting.

API REST: não suporta anônimo nativamente. Mude authenticationMode para authRequired em lib/environments.dart (recomendado) ou implemente POST /auth/guest no seu servidor.

Web

Sem login anônimo. O fluxo vai direto para /signin:

App abre → /signin → login ou cadastro → Home

Trocar o modo

Em lib/environments.dart:

authenticationMode: AuthenticationMode.anonymous,  // padrão
// ou
authenticationMode: AuthenticationMode.authRequired,
ModoComportamento
anonymousConta criada ao abrir. Dados preservados ao vincular
authRequiredSem conta até o usuário fazer login

O que o usuário sem conta consegue fazer

Vale tanto para o anônimo (anonymous) quanto para o hóspede (authRequired): a tela nunca fecha na cara dele, e o que depende de conta é ignorado em silêncio, sem crash.

ÁreaUsuário sem conta
OnboardingCompleto, igual a quem tem conta
HomeAcessível
NotificaçõesTela abre, lista vazia
Feedback e votosVê a lista; o voto é ignorado
AssinaturaO paywall abre; a compra pede login no passo seguinte
Avatar e uploadA tela abre; o upload é ignorado
Permissão ATT (iOS)Abre e avança; RevenueCat e Facebook não inicializam
Qualquer gravação no bancoIgnorada em silêncio

O botão "Continuar sem conta" na tela de login volta para a Home no nativo; na web ele marca localmente que a etapa de auth foi cumprida e entra na Home.

Proteger uma tela

final user = ref.watch(userStateNotifierProvider).user;
if (user.idOrNull == null) {
  context.push('/signin');
  return;
}

Supabase: onde cadastrar as credenciais

Para projetos com backend Supabase, os passos na Apple e no Meta são idênticos. O que muda é onde cadastrar as credenciais:

ProvedorOnde configurar
GoogleSupabase Dashboard → Auth → Providers → Google
AppleSupabase Dashboard → Auth → Providers → Apple (Services ID obrigatório)
FacebookSupabase Dashboard → Auth → Providers → Facebook

No Apple com Supabase, o Return URL do Services ID deve ser:

https://SEU_PROJETO.supabase.co/auth/v1/callback

Login social: vincula à conta anônima

No mobile, o login social vincula à conta anônima existente: o UID e todos os dados do usuário são preservados. Mesma interface nos três backends.

Cadastro com e-mail/senha: também vincula

Não é só o login social. Cadastrar com e-mail e senha a partir do estado anônimo também vincula à conta existente (não cria uma conta separada), mesmo UID, mesmos dados preservados. Firebase e Supabase já fazem isso automaticamente.

API REST: o vínculo depende de como você implementar POST /auth/signup no seu servidor, esse backend não tem noção nativa de conta anônima, então "vincular" é responsabilidade da sua própria API.

Atualizado em 03/11/2026