auth0-spa-js

À utiliser pour ajouter une authentification à des applications Vanilla JS, Svelte ou tout framework SPA agnostique — intègre le SDK `@auth0/auth0-spa-js` pour les SPA sans wrappers spécifiques à un framework

npx skills add https://github.com/auth0/agent-skills --skill auth0-spa-js

Intégration Auth0 SPA JS

Ajoutez l'authentification à n'importe quelle application monopage basée sur navigateur avec @auth0/auth0-spa-js — le SDK Auth0 bas niveau pour Vanilla JS, Svelte, SolidJS et tout SPA n'utilisant pas React, Angular ou Vue.

Instruction agent : Avant de fournir les instructions de configuration du SDK, récupérez la dernière version en lançant :

gh api repos/auth0/auth0-spa-js/releases/latest --jq '.tag_name'

Utilisez la version retournée dans toutes les lignes de dépendance au lieu de tout numéro de version codé en dur ci-dessous. Si la commande échoue, consultez https://github.com/auth0/auth0-spa-js/releases.

Prérequis

  • Navigateur moderne avec support ES2017+
  • npm ou yarn (ou utilisez CDN pour les apps sans bundler)
  • Compte Auth0 avec une Single Page Application configurée
  • Si Auth0 n'est pas encore configuré, consultez auth0-quickstart

Quand NE PAS l'utiliser

Workflow Démarrage Rapide

1. Installer le SDK

npm install @auth0/auth0-spa-js

Ou via CDN (sans bundler). Lancez ceci pour obtenir la dernière version, puis utilisez-la dans votre HTML :

VERSION=$(npm view @auth0/auth0-spa-js version)
<script src="https://cdn.auth0.com/js/auth0-spa-js/$VERSION/auth0-spa-js.production.js"></script>

2. Configurer Auth0

Pour la configuration automatisée avec Auth0 CLI, consultez Setup Guide pour les scripts complets.

Pour la configuration manuelle, créez .env (Vite) :

VITE_AUTH0_DOMAIN=your-tenant.auth0.com
VITE_AUTH0_CLIENT_ID=your-client-id

Dans le Auth0 Dashboard, configurez pour votre Single Page Application :

  • Allowed Callback URLs : http://localhost:5173
  • Allowed Logout URLs : http://localhost:5173
  • Allowed Web Origins : http://localhost:5173

3. Initialiser le Client Auth0

import { createAuth0Client } from '@auth0/auth0-spa-js';

const auth0 = await createAuth0Client({
  domain: import.meta.env.VITE_AUTH0_DOMAIN,
  clientId: import.meta.env.VITE_AUTH0_CLIENT_ID,
  authorizationParams: {
    redirect_uri: window.location.origin
  }
});

// Traiter le rappel de redirection après la connexion
const query = new URLSearchParams(window.location.search);
if ((query.has('code') || query.has('error')) && query.has('state')) {
  await auth0.handleRedirectCallback();
  window.history.replaceState({}, document.title, window.location.pathname);
}

4. Ajouter Connexion / Déconnexion

Instruction agent : Avant d'ajouter de nouveaux éléments d'interface, recherchez le projet pour trouver les gestionnaires de clic existants pour les boutons login, logout, sign-in ou sign-out. Si des gestionnaires existants sont trouvés, connectez le code Auth0 à ceux-ci sans modifier l'interface existante. Créez des boutons uniquement si aucun gestionnaire existant n'est trouvé.

// Connexion
document.getElementById('login-btn').addEventListener('click', async () => {
  await auth0.loginWithRedirect();
});

// Déconnexion
document.getElementById('logout-btn').addEventListener('click', () => {
  auth0.logout({
    logoutParams: { returnTo: window.location.origin }
  });
});

// Mettre à jour l'interface en fonction de l'état d'authentification
const isAuthenticated = await auth0.isAuthenticated();
if (isAuthenticated) {
  const user = await auth0.getUser();
  console.log(user.name, user.email);
}

5. Obtenir les Tokens d'Accès pour les Appels API

const accessToken = await auth0.getTokenSilently();

const response = await fetch('https://your-api.example.com/data', {
  headers: { Authorization: `Bearer ${accessToken}` }
});

6. Construire et Vérifier

Instruction agent : Après avoir terminé l'intégration, compilez le projet pour vérifier qu'il se compile correctement :

npm run build

Si la compilation échoue, analysez la sortie d'erreur et corrigez les problèmes. Les erreurs de compilation courantes lors de l'intégration incluent :

  • Module not found : npm install @auth0/auth0-spa-js manquant — lancez la commande d'installation
  • Cannot find name 'import.meta' : Cible TypeScript trop basse — définissez "target": "ES2020" ou plus dans tsconfig.json
  • createAuth0Client is not a function : Chemin d'import incorrect ou utilisation CDN sans étape de bundling
  • Env vars undefined at runtime : Vite nécessite le préfixe VITE_ ; webpack/CRA nécessite le préfixe REACT_APP_

Relancez la compilation après chaque correction. Suivez le nombre d'itérations de correction de compilation.

Failcheck : Si la compilation échoue toujours après 5–6 tentatives de correction, arrêtez et posez la question à l'utilisateur en utilisant AskUserQuestion : "La compilation échoue toujours après plusieurs tentatives de correction. Comment souhaitez-vous procéder ?"

  • Laisser la skill continuer à corriger de manière itérative — continuez la boucle de correction de compilation pour 5–6 autres tentatives
  • Le corriger manuellement — montrez les erreurs restantes et laissez l'utilisateur les résoudre
  • Ignorer la vérification de compilation — continuez sans compilation réussie

Documentation Détaillée

  • Setup Guide — Scripts de configuration automatisée (Bash/PowerShell), commandes Auth0 CLI, configuration .env, configuration des URL de rappel
  • Integration Patterns — Gestion des tokens, appels API, actualisation des tokens, organisations, MFA, DPoP, gestion des erreurs, modèles avancés
  • Testing & Reference — Options de configuration, référence des claims, checklist de test, problèmes courants, considérations de sécurité

Erreurs Courantes

Erreur Solution
Décalage du port d'URL de rappel (ex. localhost:3001 vs localhost:5173) Faites correspondre exactement les Allowed Callback URLs à votre port de serveur dev dans le Auth0 Dashboard
client_secret dans le code SPA Les SPA ne doivent jamais avoir un secret client — supprimez-le. Auth0 définit la méthode d'auth sur None pour les apps SPA
Tokens stockés dans localStorage Utilisez le stockage en mémoire (défaut) ou sessionStorage. Jamais localStorage — risque XSS
getTokenSilently() lance login_required lors du rechargement de page Ajoutez l'origine de votre app aux Allowed Web Origins dans le Auth0 Dashboard
handleRedirectCallback() non appelé après redirection Doit être appelé après la redirection de connexion pour échanger le code d'auth ; sans cela les paramètres d'URL persistent et se re-déclenchent
Le domaine inclut le préfixe https:// Le domaine Auth0 doit être uniquement le hostname : your-tenant.auth0.com, pas https://your-tenant.auth0.com
loginWithPopup() appelé depuis du code d'initialisation asynchrone Les popups doivent être déclenchées directement depuis un geste utilisateur (gestionnaire de clic). Jamais depuis l'init ou le code de chargement de page
Utiliser Auth0Provider de @auth0/auth0-react en Vanilla JS Pour Vanilla JS, utilisez createAuth0Client() directement — aucun composant provider nécessaire

Skills Associées

Référence Rapide

Méthodes Principales

Méthode Description
createAuth0Client(options) Créer et initialiser le client (appelle checkSession en interne)
new Auth0Client(options) Instancier sans vérification de session automatique
auth0.loginWithRedirect(options?) Rediriger vers Auth0 Universal Login
auth0.loginWithPopup(options?) Ouvrir la connexion Auth0 dans une popup
auth0.logout(options?) Effacer la session et rediriger
auth0.handleRedirectCallback(url?) Traiter le résultat de redirection après la connexion
auth0.isAuthenticated() Promise<boolean>
auth0.getUser() Promise<User \| undefined>
auth0.getTokenSilently(options?) Promise<string> — token d'accès
auth0.checkSession() Tenter une réauthentification silencieuse

Cas d'Usage Courants

Références

Skills similaires