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 avecvisibility: publicsont accessibles sans authentification, tandis que les documents avecvisibility: 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
- Résolution dynamique de visibilité via
getEntry('docs', candidateId)dansapps/web/src/middleware.ts. - Accès libre aux documents publics : Si un document possède
visibility: public, la requête passe directement vianext()sans exiger de session.
Correction Apportée2/2
- Protection des documents privés : Si un document possède
visibility: private(ou par défaut sans attributvisibility), la session Better Auth est vérifiée. En l’absence de session, redirection 302 vers/login?callbackURL=.... - 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 :
# Démarrage du serveur dev Cloudflare (avec bindings D1 et KV)task dev:wranglerNote :
task dev:wranglercompile automatiquement l’application (pnpm build) avant de lancerwrangler 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 :
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 OKContent-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 :
curl -I http://localhost:8787/gettingstarted/01-setup-local/ou avec le format avec tiret :
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 FoundLocation: /login?callbackURL=%2Fgettingstarted%2F01-setup-local%2F- Le code HTTP est
302 Found. - L’en-tête
Locationredirige vers/loginavec le paramètrecallbackURL.
Test 3 : Accès à un Document Privé Avec Session Authentifiée1/2
- Se connecter via l’endpoint de connexion Better Auth pour récupérer le cookie de session :
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- Tenter d’accéder au document privé en fournissant le cookie :
Test 3 : Accès à un Document Privé Avec Session Authentifiée2/2
curl -I http://localhost:8787/gettingstarted/01-setup-local/ -b cookies.txtRésultat Attendu :
HTTP/1.1 200 OKContent-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 :
curl -I http://localhost:8787/gettingstarted/01-setup-local/ \ -H "User-Agent: Algolia Crawler"Résultat Attendu :
HTTP/1.1 200 OK4. Commandes de Validation Automatisée1/2
Exécuter la chaîne de vérification :
# 1. Typecheck Astro & TypeScriptnpx pnpm@12.3.4 --filter amn-astro typecheck
# 2. Tests unitaires Vitestnpx pnpm@12.3.4 --filter amn-astro test run
# 3. Build de production Astronpx pnpm@12.3.4 --filter amn-astro build4. 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 dedist/serveret indexation Pagefind.