Receita — Cadastro white-label (self-register)
Cenário: seu SaaS quer que usuários se cadastrem sozinhos e já tenham acesso imediato — sem aprovação manual. O Auth Platform cria o usuário e a conta automaticamente.
O que acontece
Usuário acessa a tela de login do seu app
│
├─ Clica "Criar conta" (aparece quando allowSelfRegister=true)
│
├─ Preenche e-mail + senha (ou usa Google)
│
└─ Auth Platform:
1. Cria User (e-mail + senha hash Argon2id)
2. Cria Account pessoal para o usuário
3. Cria Membership com a role padrão
- status: active (se requireAdminActivation=false)
- status: pending (se requireAdminActivation=true)
4. Emite token JWT → redirect para seu app
Passo 1 — Configurar o sistema
curl -X POST http://localhost:4000/admin/systems \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Meu SaaS",
"redirectUris": ["https://meusaas.com/callback"],
"allowedScopes": ["openid","email","profile","offline_access"],
"allowSelfRegister": true, # ← usuário pode se cadastrar
"requireAdminActivation": false, # ← acesso imediato (sem aprovação)
"requireEmailOtp": true, # ← verifica e-mail no 1º login
"requireMfa": false,
"multiAccount": false
}'
Para exigir aprovação antes do acesso, use
requireAdminActivation: true. O usuário verá "Aguardando aprovação do administrador" após o cadastro.
Passo 2 — Definir a role padrão
O usuário recebe a defaultRole do sistema automaticamente.
Crie a role e defina como padrão:
# Criar role "user"
ROLE=$(curl -s -X POST http://localhost:4000/admin/systems/$SYSTEM_ID/roles \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"user","isAdmin":false,"scopes":["saas:read","saas:write"]}')
ROLE_ID=$(echo $ROLE | jq -r '.id')
# Definir como role padrão
curl -X PATCH http://localhost:4000/admin/systems/$SYSTEM_ID \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"defaultRoleId\": \"$ROLE_ID\"}"
Passo 3 — Integrar no frontend
Nada muda no código do seu app — o fluxo de login é idêntico. O botão "Criar conta" aparece automaticamente na tela de login do Auth Platform:
// O UserManager é configurado normalmente
const auth = new UserManager({
authority: 'http://localhost:4000',
client_id: SEU_CLIENT_ID,
redirect_uri: `${origin}/callback`,
scope: 'openid email profile offline_access',
response_type: 'code',
automaticSilentRenew: true,
});
// Redireciona para a tela de login do Auth Platform
// → A tela exibe "Entrar" + "Criar conta" automaticamente
await auth.signinRedirect();
Passo 4 — Receber o webhook de novo acesso
Quando um usuário se cadastra, o Auth Platform emite user.access_granted:
// Seu servidor de webhooks
app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => {
if (!verifyWebhook(req.body.toString(), req.headers['x-signature'] as string)) {
return res.status(401).end();
}
const payload = JSON.parse(req.body.toString());
if (payload.event === 'user.access_granted') {
const { userId, accountId, roles } = payload;
// Inicializar dados do novo usuário na sua base:
await db.user.create({
data: {
authUserId: userId,
accountId,
plan: 'free',
createdAt: new Date(),
},
});
// Enviar e-mail de boas-vindas
await sendWelcomeEmail(payload.userId);
}
res.status(200).json({ received: true });
});
Passo 5 — Verificação de e-mail (requireEmailOtp=true)
Se requireEmailOtp: true, o Auth Platform pede um código de 6 dígitos
enviado por e-mail antes de completar o primeiro login:
- Usuário cadastra e-mail + senha
- Auth Platform envia código via
EMAIL_PROVIDER(SMTP ou Resend) - Usuário digita o código na tela de verificação
- Auth Platform marca
emailVerified: truee emite o token
O único requisito: configurar EMAIL_FROM e as credenciais do provedor no .env.
Fluxo com requireAdminActivation=true
Se você quer aprovar manualmente antes do acesso:
Usuário cadastra → Membership criada com status=pending
│
↓
Admin recebe notificação
(webhook user.access_granted com roles=[])
│
Admin aprova no Admin Console
→ PATCH /admin/memberships/:id { status: "active" }
│
Auth Platform emite webhook user.access_granted
com roles preenchidos
│
Usuário consegue logar
Checklist
- Sistema com
allowSelfRegister: true -
defaultRoleIddefinido (role que o usuário recebe ao se cadastrar) - Webhook configurado para provisionar dados na sua base
-
EMAIL_PROVIDERconfigurado para verificação de e-mail - Decidir:
requireAdminActivation: false(acesso imediato) outrue(aprovação manual)
Exemplo funcional: veja
examples/01-nextjs-pkcecomallowSelfRegister: true