Skip to content

Guide de Test : Contrôle de Visibilité Starlight et Authentification Better Auth

Guide de Test : Contrôle de Visibilité Starlight et Authentification Better Auth

Instructions de validation pas-à-pas pour tester le système de visibilité des documents Starlight (public vs privé) avec Better Auth

Guide de Test : Contrôle de Visibilité Starlight et Better Auth

Phase : DOC → SPEC → CODE → TEST → INTÉG
Composant : Middleware Starlight (apps/web/src/middleware.ts)
Objectif : Valider que les documents Starlight avec visibility: public sont accessibles sans authentification, tandis que les documents avec visibility: private (ou par défaut) exigent une session Better Auth valide.

1. Contexte du Problème Résolu

Lors de la migration vers Better Auth dans apps/web/src/middleware.ts, la vérification de la propriété de frontmatter visibility avait été omise. Toutes les routes de documentation (/docs/* et /gettingstarted/*) exigeaient inconditionnellement une session active, redirigeant systématiquement les utilisateurs non connectés vers /login.

Correction Apportée1/2

  1. Résolution dynamique de visibilité via getEntry('docs', candidateId) dans apps/web/src/middleware.ts.
  2. Accès libre aux documents publics : Si un document possède visibility: public, la requête passe directement via next() sans exiger de session.

Correction Apportée2/2

  1. Protection des documents privés : Si un document possède visibility: private (ou par défaut sans attribut visibility), la session Better Auth est vérifiée. En l’absence de session, redirection 302 vers /login?callbackURL=....
  2. Rebuild du Data Store : Les modifications de frontmatter sont compilées dans le Content Layer à chaque build (apps/web build).

2. Prérequis pour les Tests

Le serveur dev local sous Cloudflare Workers doit être actif sur le port 8787 :

Terminal window
# Démarrage du serveur dev Cloudflare (avec bindings D1 et KV)
task dev:wrangler

Note : task dev:wrangler compile automatiquement l’application (pnpm build) avant de lancer wrangler dev.

3. Procédure de Test Manuel

Test 1 : Accès à un Document Déclaré Public (Succès direct sans login)1/2

Tester l’accès au document d’édition visuelle Sanity dont le frontmatter est configuré avec visibility: public :

Terminal window
curl -I http://localhost:8787/docs/l1_contenu/sanity/visual-editing/astro-visual-editing-by-sanity/

Test 1 : Accès à un Document Déclaré Public (Succès direct sans login)2/2

Résultat Attendu :

HTTP/1.1 200 OK
Content-Type: text/html
  • Le code HTTP est 200 OK.
  • La page HTML complète est servie sans redirection vers /login.

Test 2 : Accès à un Document Déclaré Privé Sans Authentification (Redirection vers Login)1/2

Tester l’accès à un document de guide dont le frontmatter est configuré avec visibility: private :

Terminal window
curl -I http://localhost:8787/gettingstarted/01-setup-local/

ou avec le format avec tiret :

Terminal window
curl -I http://localhost:8787/getting-started/01-setup-local/

Test 2 : Accès à un Document Déclaré Privé Sans Authentification (Redirection vers Login)2/2

Résultat Attendu :

HTTP/1.1 302 Found
Location: /login?callbackURL=%2Fgettingstarted%2F01-setup-local%2F
  • Le code HTTP est 302 Found.
  • L’en-tête Location redirige vers /login avec le paramètre callbackURL.

Test 3 : Accès à un Document Privé Avec Session Authentifiée1/2

  1. Se connecter via l’endpoint de connexion Better Auth pour récupérer le cookie de session :
Terminal window
curl -X POST http://localhost:8787/api/auth/sign-in/email \
-H "Content-Type: application/json" \
-d '{"email":"admin@amn.dev","password":"SecurePassword123!"}' \
-c cookies.txt
  1. Tenter d’accéder au document privé en fournissant le cookie :

Test 3 : Accès à un Document Privé Avec Session Authentifiée2/2

Terminal window
curl -I http://localhost:8787/gettingstarted/01-setup-local/ -b cookies.txt

Résultat Attendu :

HTTP/1.1 200 OK
Content-Type: text/html
  • Le code HTTP est 200 OK.
  • L’utilisateur authentifié accède au document privé.

Test 4 : Vérification du Déclencheur Algolia Crawler

Vérifier que les requêtes provenant du crawler Algolia sont autorisées sans session :

Terminal window
curl -I http://localhost:8787/gettingstarted/01-setup-local/ \
-H "User-Agent: Algolia Crawler"

Résultat Attendu :

HTTP/1.1 200 OK

4. Commandes de Validation Automatisée1/2

Exécuter la chaîne de vérification :

Terminal window
# 1. Typecheck Astro & TypeScript
npx pnpm@12.3.4 --filter amn-astro typecheck
# 2. Tests unitaires Vitest
npx pnpm@12.3.4 --filter amn-astro test run
# 3. Build de production Astro
npx pnpm@12.3.4 --filter amn-astro build

4. Commandes de Validation Automatisée2/2

Critères de Succès :

  • typecheck : 0 erreur, 0 avertissement.
  • vitest : 100% des tests passés.
  • build : Génération réussie de dist/server et indexation Pagefind.
Switch to normal mode

Contents