# Authentification (auth)

> Module auth : Connexion e-mail, Apple et Google (Supabase Auth), profil, suppression de compte.

Connexion e-mail, Apple et Google (Supabase Auth), profil, suppression de compte.

:::note[Page générée]
Générée depuis `modules/auth/README.md`, `module.json`, `config.ts`, `index.ts` à chaque build du site : modifier la source, pas cette page.
:::

## Fiche technique

| | |
|---|---|
| Paquet | `@daroms/module-auth` |
| Activer | `bun daroms module add auth` |
| Requiert | aucun module |
| Dépendances natives | `expo-apple-authentication`, `expo-crypto` |
| Routes ajoutées | `app/(auth)/_layout.tsx` (`AuthLayout`), `app/(auth)/sign-in.tsx` (`SignInScreen`), `app/(auth)/sign-up.tsx` (`SignUpScreen`), `app/(auth)/forgot-password.tsx` (`ForgotPasswordScreen`) |
| Onglets | aucun |
| Migrations | `migrations/profiles.sql` |
| Edge functions | `functions/delete-account` |
| Variables d'environnement | aucune |
| Gate de navigation | oui (décide de la redirection au démarrage) |
| Section de réglages | oui (ajoutée au module settings) |

## Mise en place et usage

Connexion Supabase : e-mail + mot de passe, Apple (jeton natif), Google (OAuth PKCE). Gate de connexion, profil, suppression de compte.

- Activer : `bun daroms module add auth` (ajoute routes `(auth)/*`, migration `profiles`, edge function `delete-account`).
- Config (`manifest.modules.auth`) : `providers` (`email`, `apple`, `google`), `requireAuth`.
- Supabase : activer les fournisseurs Apple et Google dans Auth > Providers ; ajouter `<scheme>://**` aux URL de redirection.
- Déployer la fonction : `bunx supabase functions deploy delete-account`.
- Profil : `useProfile()` ; déconnexion : `signOut()`.

## Configuration

Dans `app.manifest.ts > modules['auth']`, validée par `modules/auth/config.ts` au démarrage.

| Clé | Schéma zod | Rôle |
|---|---|---|
| `providers` | `z.array(z.enum(['email', 'apple', 'google'])).min(1).default(['email', 'apple', 'google'])` | Méthodes proposées. Apple est obligatoire sur iOS dès qu'une connexion sociale existe. |
| `requireAuth` | `z.boolean().default(true)` | true : toute l'app exige une session ; false : connexion à la demande. |

Valeurs écrites par `module add` :

```json
{
  "providers": [
    "email",
    "apple",
    "google"
  ],
  "requireAuth": true
}
```

## Exports

```ts
import { deleteAccount, signInWithApple, signInWithEmail } from '@daroms/module-auth'
```

- Valeurs : `deleteAccount`, `signInWithApple`, `signInWithEmail`, `signInWithGoogle`, `signOut`, `signUpWithEmail`, `useProfile`, `AuthLayout`, `ForgotPasswordScreen`, `SignInScreen`, `SignUpScreen`

- Types : `Profile`

---

Page HTML : https://daromsartof.github.io/daroms-speedapp/reference/modules/auth/
Index de la documentation : https://daromsartof.github.io/daroms-speedapp/llms.txt
