# Autenticación (funciones remotas)

La variante con funciones remotas de [`vela enable auth`](/es/docs/enable/auth). Genera los mismos flujos de inicio de sesión, registro, código de un solo uso, restablecimiento de contraseña, cambio de correo y ajustes, pero cada formulario envía a una [función remota](https://svelte.dev/docs/kit/remote-functions) de SvelteKit en un `form.remote.ts` en lugar de a una acción de formulario gestionada con sveltekit-superforms.

### Sintaxis

```
$ vela enable auth --remote
```

`--remote` necesita vela 0.15.13 o posterior; las versiones anteriores lo ignoran y generan la versión con acciones de formulario. La [página del patrón](/es/patterns/enable-auth-remote) muestra todos los archivos que genera esta variante.

Igual que la versión con acciones de formulario, necesita un [backend](/es/docs/enable/backend) y [shadcn-svelte](/es/docs/ui).

### Qué cambia

Cada página de autenticación conserva su `+page.svelte` y su `+page.ts`, y el manejador del formulario pasa a un `form.remote.ts` a su lado:

```
src/routes/(public)/(auth)/login/form.remote.ts
src/routes/(public)/(auth)/signup/form.remote.ts
src/routes/(public)/(auth)/reset/form.remote.ts
src/routes/(public)/(auth)/otp/[token]/form.remote.ts
src/routes/(public)/(auth)/welcome/form.remote.ts
src/routes/(public)/(auth)/confirm-reset/[token]/form.remote.ts
src/routes/(public)/(auth)/confirm-email-change/[token]/form.remote.ts
src/routes/(app)/settings/form.remote.ts
```

Cada uno exporta un `form()`. Un formulario con campos recibe como primer argumento el esquema Zod de la página, de `src/lib/schemas/`, así que el manejador solo se ejecuta con datos válidos y tipados. Los manejadores leen `locals`, `cookies` y `url` de `getRequestEvent()`, y un error de PocketBase, como una contraseña incorrecta, vuelve como un resultado `{ message }` que la página muestra. Un `+page.server.ts` que se mantiene conserva solo su `load`; el de la página de inicio de sesión sigue pidiendo a PocketBase los métodos de inicio de sesión habilitados. La página de ajustes exporta cuatro funciones desde un archivo: `updateProfileForm`, `changeEmailForm`, `changePasswordForm` y `resendVerificationForm`.

Las páginas generadas no usan sveltekit-superforms ni formsnap, y el comando no los añade. Añade sveltekit-flash-message y Zod si el proyecto no los tiene.

### Configuración

Las funciones remotas son experimentales en SvelteKit, así que el comando las activa en las opciones de `sveltekit()` en `vite.config.ts`, junto con el modo asíncrono de Svelte:

```ts
sveltekit({
  experimental: { remoteFunctions: true },
  compilerOptions: { experimental: { async: true } }
})
```

Si tu configuración no tiene una forma que el comando pueda editar, estas son las líneas que hay que añadir a mano.

### Qué se mantiene igual

El grupo protegido `(app)`, el layout y la barra lateral del panel, la cookie `pb_auth`, OAuth, los códigos de un solo uso, las plantillas de correo, las reglas restringidas de `users` y la colección `oauth_accounts` son idénticos a [`vela enable auth`](/es/docs/enable/auth). Las acciones de formulario y las funciones remotas pueden convivir, así que el resto de la aplicación puede usar cualquiera de las dos.