---
title: "Autenticação"
description: "Login, token, sessão, cadastro e recuperação de senha."
---
O Cinderace trata o ciclo de vida do token para você. Login salva, logout limpa e todas as chamadas autenticadas reutilizam o bearer automaticamente.

## Login

```ts
const { token } = await sdk.auth.signIn({
    captcha: "<token-do-captcha>",
    cpf: "00000000000",
    password: "senha"
});
```

O método `signIn` está anotado com `setsAuthToken`. A SDK salva o `token` retornado e passa a enviar:

```http
Authorization: Bearer <token>
```

## Sessão

```ts
const session = await sdk.auth.getSession();

console.log(session.user.name);
console.log(session.session.expiresIn);
```

Se a sessão expirar, renove:

```ts
await sdk.auth.renewSession();
```

`renewSession` também salva o novo token.

## Logout

```ts
await sdk.auth.signOut();
```

`signOut` está anotado com `clearsAuthToken` e remove o token salvo.

## Fluxo de cadastro

```text
identify(cpf)  ->  isRegistered?
   │
   ├── true  -> signIn(cpf, password)
   └── false -> getSignUp() -> signUp(body)
```

```ts
const identification = await sdk.auth.identify({
    cpf: "00000000000"
});

if (identification.isRegistered) {
    await sdk.auth.signIn({ captcha, cpf, password });
} else {
    const { form } = await sdk.auth.getSignUp();
    await sdk.auth.signUp({
        captcha,
        cpf,
        tel: "11999998888",
        name: "Maria Silva"
    });
}
```

O cadastro pode terminar pendente. Complete com:

```ts
await sdk.auth.updateSignUpPending({
    cpf: "00000000000",
    formId: "form-id"
});
```

## Recuperação de senha

```ts
const methods = await sdk.auth.getRecoveryMethods({ cpf: "00000000000" });

await sdk.auth.recoverPassword({
    captcha,
    stage: "REQUEST_CODE",
    recoveryMethod: "EMAIL",
    cpf: "00000000000"
});

await sdk.auth.recoverPassword({
    stage: "CONFIRM_CODE",
    recoveryMethod: "EMAIL",
    cpf: "00000000000",
    code: "123456"
});

await sdk.auth.recoverPassword({
    stage: "CHANGE_PASSWORD",
    cpf: "00000000000",
    code: "123456",
    newPassword: "nova-senha",
    newPasswordConfirmation: "nova-senha"
});
```

## Storage

No browser, o **Cinderace Core** usa `localStorage`. Em SSR/Node, usa memória. Veja [Instalação](/docs/guias/instalacao/) para trocar o storage.

:::caution[Token e SSR]
Nunca compartilhe uma instância entre usuários no servidor. Crie uma instância por request.
:::