Pular para o conteúdo
supastack
Explorar a documentação
MobileExpo

For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /pt/docs/mobile/passkeys.md (or send Accept: text/markdown).

Início de sessão com passkey

Início de sessão sem palavra-passe através de um handoff pelo browser que devolve a sessão à app.

Como funciona o handoff

O início de sessão com passkey começa na app e termina no browser do sistema. A app abre {API URL}/auth?mobile_callback=<deep link> através de WebBrowser.openAuthSessionAsync; depois de a página web concluir qualquer método de início de sessão, chama GET /api/auth/mobile-handoff, que redireciona de volta para <scheme>://auth/callback trazendo o cookie de sessão e um nonce de state.

Cada tentativa gera um nonce novo que tem de fazer a viagem de ida e volta inalterado — um parâmetro state diferente é rejeitado como stateMismatch, por isso um callback velho ou forjado não consegue injetar uma sessão. O cookie devolvido junta-se ao mesmo jar do SecureStore que o cliente Better Auth Expo usa (supastack.auth_cookie); depois a store de sessão é notificada e a app com sessão iniciada renderiza.

Um sheet de browser dispensado resolve-se num resultado silencioso cancelled em vez de um erro, por isso mantém o ecrã de início de sessão inalterado quando isso acontece.

# apps/mobile/.env.local
EXPO_PUBLIC_APP_SCHEME=supastack

# apps/web/.env.local — server side
AUTH_PASSKEY_ENABLED=true
MOBILE_ALLOWED_ORIGINS=

Mantém a allow-list idêntica dos dois lados

Os dois lados validam o destino do callback: a app aceita apenas <scheme>://auth mais as suas origens de produção configuradas, e o servidor verifica a mesma lista construída a partir de EXPO_PUBLIC_APP_SCHEME e MOBILE_ALLOWED_ORIGINS. Callbacks com credenciais, esquemas desconhecidos ou sufixos parecidos são rejeitados antes de qualquer cookie se mover.

Em produção MOBILE_ALLOWED_ORIGINS é obrigatória e tem de listar origens HTTPS exatas e não-locais — wildcards não são aceites. A app sai empacotada enquanto o servidor lê o seu ambiente por pedido, por isso uma mudança de scheme ou origem exige um novo build da app e um deploy do servidor; mudar só um lado faz os handoffs falhar fechado.

Os outros métodos sem palavra-passe

O mesmo ecrã de início de sessão oferece códigos de uso único por email (requestEmailOtp seguido de verifyEmailOtp) e início de sessão social Apple ou Google através de signIn.social com um callbackURL. As passkeys aparecem quando AUTH_PASSKEY_ENABLED=true no servidor; a configuração de passkey e de dois fatores de uma conta continua na app web em Configurações → Segurança.

Verificação e resolução de problemas

Exercita um callback de arranque a frio, um regresso a uma app em execução, um sheet de browser cancelado e uma sessão expirada no build pretendido. As falhas tipadas — passkeyUnavailable, browserFailed, untrustedCallback, missingCookie, malformedCookie, cookieStoreFailed — descrevem cada uma uma quebra distinta; stateMismatch significa que o nonce não fez a viagem de ida e volta e a tentativa foi recusada corretamente.

Se todos os handoffs forem rejeitados, compara o EXPO_PUBLIC_APP_SCHEME do build publicado com o scheme e o MOBILE_ALLOWED_ORIGINS do servidor — o par desalinha quando um lado foi redesenvolvido sem o outro.

Perguntas frequentes

14 perguntas

O que é o supastack?

O supastack é uma base modular para construir produtos SaaS com IA. Reúne a infraestrutura comum para que possas concentrar-te nas funcionalidades próprias do teu produto.

Suporta web e mobile?

Sim. O supastack inclui apps Next.js e Expo como pontos de partida para experiências web e mobile.

Que autenticação está incluída?

O Better Auth cobre email/palavra-passe, OTP e login social. Os workspaces pessoais são aprovisionados com a conta para que os registos fiquem delimitados desde o primeiro dia.

Como é suportada a IA?

O supastack inclui IA multi-fornecedor configurável, registo de utilização, orçamentos e suporte encriptado de chaves próprias (BYOK).

Como são geridas as subscrições?

Para produtos construídos sobre o kit, a faturação Stripe, as subscrições e as permissões formam a base do acesso pago. Os segredos de fornecedor ficam no servidor.

Onde vive o código próprio do meu produto?

As funcionalidades próprias do produto ficam num codebase separado, enquanto o produto configura e integra os módulos base do supastack.

Como funciona o preço do supastack?

O kit é uma compra única com atualizações vitalícias: Stack único por 249 $ — à escolha entre os repositórios Next.js (web), Expo (iOS e Android) ou Tauri (macOS e Windows) —, Stack duplo por 398 $ com dois repositórios à escolha, ou Pacote completo por 399 $ com os três repositórios e o monorepo completo, mais 75 $ por lugar de programador adicional. Sem subscrição do kit. O checkout neste site entrega a tua chave de licença por email, com acesso ao repo por convite GitHub.

Como é que os workspaces delimitam os meus dados?

Os registos do utilizador são delimitados por workspaceId. Identidade, permissões, utilização de IA, eventos de faturação e entradas de auditoria ficam dentro do limite do workspace pessoal.

Como funcionam os jobs em segundo plano?

O Trigger.dev é o runtime de jobs explícito. O contrato JobRunner só promete enqueue, status e cancel — a semântica de workflow permanece específica e explícita do Trigger.dev.

Como difere o email da divulgação?

O email transacional cobre fluxos de produto como avisos de conclusão de tarefas. A divulgação fria e as campanhas pertencem ao próprio produto, fora do módulo de email deste kit.

Como funcionam as compras no aplicativo móvel?

O aplicativo móvel inclui compras nativas e restauração via RevenueCat, com acesso verificado pelo servidor. Configure as contas das lojas e conclua os testes em dispositivos antes de publicar. A cobrança web permanece separada.

Onde residem as chaves dos fornecedores de IA?

As credenciais BYOK são encriptadas e ficam no servidor. As chaves são higienizadas nos logs; a utilização e os orçamentos ficam visíveis ao nível do workspace.

Quais métodos de pagamento o checkout aceita?

O checkout hospedado na Stripe aceita cartões e também pode oferecer Alipay e WeChat Pay quando essas carteiras estiverem ativadas na conta Stripe — útil para compradores na China. As autorizações de carteira são confirmadas de forma assíncrona, então a página da licença é atualizada assim que o pagamento é liquidado.

Posso solicitar um reembolso?

Depois de obter acesso ao repositório, o supastack é seu para sempre, portanto não pode ser reembolsado. Mas fique tranquilo: você recebe o código-fonte completo com atualizações vitalícias para criar e lançar produtos ilimitados para você ou seus clientes. Você apenas não pode revender o código nem redistribuir o repositório como starter kit ou modelo.

PT
Tema