> ## Documentation Index
> Fetch the complete documentation index at: https://docs.meru.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Autenticación

> Login de usuarios alojado por Meru — código por email y passkeys nativas.

El login lo aloja **Meru**: el SDK habla directamente con los endpoints de auth
públicos de Meru usando tu company app id público (sin secreto en el cliente). Meru
devuelve un **token de sesión** que envías como `Bearer` en cada llamada de la billetera.

## El cliente de auth

<CodeGroup>
  ```ts React Native theme={null}
  import { createMeruAuth } from "@meru.app/device-signer/auth";

  const auth = createMeruAuth({
    authBase: "https://stablecoin-api.getmeru.com",
    companyId: "<tu company id público>",
    passkeyDomain: "yourapp.com",
    storage: { /* getItem / setItem / removeItem */ },
  });
  ```

  ```dart Flutter theme={null}
  final auth = MeruAuth(
    authBase: 'https://stablecoin-api.getmeru.com',
    companyId: '<tu company id público>',
    passkeyDomain: 'yourapp.com',
  );
  ```

  ```swift iOS theme={null}
  let auth = MeruAuth(
      authBase: URL(string: "https://stablecoin-api.getmeru.com")!,
      companyId: "<tu company id público>",
      passkeyDomain: "yourapp.com"
  )
  ```

  ```kotlin Android theme={null}
  val auth = MeruAuth(
      context = applicationContext,
      authBase = "https://stablecoin-api.getmeru.com",
      companyId = "<tu company id público>",
      passkeyDomain = "yourapp.com",
  )
  ```
</CodeGroup>

## Métodos

| Llamada                        | Qué hace                                                                           |
| ------------------------------ | ---------------------------------------------------------------------------------- |
| `restore()`                    | Recarga una sesión guardada al iniciar. Devuelve la sesión o null.                 |
| `sendEmailCode(email)`         | Envía un código por email. Devuelve un código de dev solo en backends locales/dev. |
| `verifyEmailCode(email, code)` | Verifica el código → devuelve una sesión.                                          |
| `enablePasskey()`              | Activa el login con passkey para el usuario con sesión iniciada.                   |
| `loginWithPasskey(email?)`     | Inicia sesión con una passkey (sin usuario si se omite).                           |
| `logout()`                     | Borra la sesión guardada.                                                          |

<Note>
  En **Android**, las llamadas de passkey (`enablePasskey`, `loginWithPasskey`)
  reciben un contexto de **Activity**, p. ej. `auth.enablePasskey(activity)`.
</Note>

## Persistencia de la sesión

La sesión se guarda en almacenamiento seguro (Keychain / Keystore / almacenamiento
cifrado), así que llama a `restore()` una vez al iniciar:

<CodeGroup>
  ```ts React Native theme={null}
  const session = await auth.restore(); // null si no hay sesión
  ```

  ```swift iOS theme={null}
  let session = auth.restore()
  ```

  ```kotlin Android theme={null}
  val session = auth.restore()
  ```
</CodeGroup>

¿Listo para agregar Face ID / Touch ID / huella? Ver [Passkeys](/es/self-custody/passkeys).
