feat(auth): Better Auth magic-link + tables satellites (THI-131, slice 2/3) - #8
Conversation
|
Warning Review limit reached
More reviews will be available in 17 minutes and 29 seconds. Learn how PR review limits work. Your organization has run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Free Run ID: 📒 Files selected for processing (9)
Note 🎁 Summarized by CodeRabbit FreeYour organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Pro by visiting https://app.coderabbit.ai/login. Comment |
Revue Lead Dev — LGTM ✅ (non bloquant)Implémentation complète et conforme au périmètre THI-131 (magic-link Better Auth self-host, stack sur Vérifs (j'ai validé en parallèle une implémentation équivalente du même schéma auth contre un Postgres réel) :
Notes mineures (non bloquantes, à traiter ici ou en suivi) :
Rien de bloquant : prêt à merger côté technique. Merge réservé à Thibault. |
|
⛔ Repassée en DRAFT par le CTO — ne pas merger en l'état. Le gate local échoue (jamais passé vert) : Cause : |
…e 2/3 THI-123) Auth email magic-link (Better Auth v1, prismaAdapter), sans mot de passe. Données auth hébergées côté serveur Nitro uniquement (RGPD, jamais exposées client). OAuth Google = phase 2 (hors scope). - Prisma : tables sessions / accounts / verifications greffées sur User (slice 1) + migration versionnée `auth_better_auth_tables` - server/utils/auth.ts : instance Better Auth (magicLink plugin, prismaAdapter PG) - server/utils/mailer.ts : envoi e-mail (dev = console log, prod = SMTP nodemailer) - server/api/auth/[...all].ts : route Nitro catch-all → Better Auth handler - composables/useAuth.ts : signIn(email)/signOut + session réactive côté client - pages/connexion.vue : formulaire magic-link (Tailwind tokens, FR) - nuxt.config.ts : runtimeConfig auth + fix typecheck PluginOption cast - .env.example : BETTER_AUTH_SECRET, APP_URL, SMTP_* QA locale : lint ✓ · typecheck TS strict ✓ · build Nitro ✓ · test 6 ✓ migrate deploy 3 migrations depuis base vide ✓ Co-Authored-By: Paperclip <noreply@paperclip.ing>
4929999 to
9f98e6e
Compare
WS-Auth+Profil — Slice 2/3 : Auth email magic-link (THI-131)
Stacké sur PR #5 (
feat/profil-data-model). À merger après PR #5.Contenu
sessions/accounts/verificationsgreffées sur leUserdu slice 1 + migration versionnéeauth_better_auth_tables.server/utils/auth.ts: instance Better Auth v1 (magicLinkplugin,prismaAdapterPostgreSQL, données serveur uniquement — RGPD).server/utils/mailer.ts: envoi e-mail (dev = log console sans SMTP, prod = nodemailer SMTP configurable).server/api/auth/[...all].ts: route Nitro catch-all → Better Auth handler (couvrePOST /api/auth/magic-link/sign-in,GET /api/auth/magic-link/verify, etc.).composables/useAuth.ts:signIn(email)/signOut()+ session réactive côté client.pages/connexion.vue: formulaire magic-link (Tailwind tokens, FR, accessible).nuxt.config.ts:runtimeConfigauth + fixPluginOptioncast (typecheck)..env.example:BETTER_AUTH_SECRET,APP_URL,SMTP_*.Hors scope (slice 3)
UI profil, endpoints lecture/écriture profil, import copier-coller.
Dev local — test rapide
QA locale (PostgreSQL 16)
pnpm lint✓ ·pnpm typecheckTS strict ✓ ·pnpm buildNitro ✓ ·pnpm test✓ (6 tests).prisma migrate deploydepuis base vide → 3 migrations appliquées ✓.Taille
~388 l. dont 56 SQL généré + corrections nuxt.config → ~332 lignes fonctionnelles. < 400 ✓.
Règles
PR-only · seul Thibault merge · TS strict · Tailwind tokens.