Aller au contenu

Authentification

L’authentification et l’autorisation sont deux processus de sécurité qui vous aident à contrôler qui a accès aux différentes parties de votre site web ou de votre application. L’authentification est le processus de vérification de l’identité d’un visiteur, et l’autorisation est le processus qui permet aux visiteurs d’accéder à des itinéraires et à des ressources protégés.

L’authentification vous permet de personnaliser les zones de votre site pour les personnes connectées et offre la meilleure protection pour les informations personnelles ou privées. Les bibliothèques d’authentification (par exemple Lucia Auth, Auth.js) fournissent des utilitaires pour plusieurs méthodes d’authentification telles que la connexion par e-mail et les fournisseurs OAuth.

Voir comment ajouter une authentification avec Supabase ou ajouter une authentification avec Firebase dans nos guides dédiés à ces services backend.

Lucia est une bibliothèque d’authentification spécialisée sur le framework, une bibliothèque d’authentification basée sur la session avec un excellent support Astro.

Installez Lucia en utilisant le gestionnaire de paquets de votre choix.

Fenêtre de terminal
npm install lucia

Utilisez le guide “Démarrer avec Astro” pour initialiser Lucia avec un adaptateur et configurer une base de données pour stocker les utilisateurs et les sessions.

Auth.js est une solution d’authentification indépendante du framework. Un adaptateur de framework communautaire auth-astro est disponible pour Astro.

Utilisez la commande astro add de votre gestionnaire de paquets préféré pour ajouter l’intégration astro-auth.

Fenêtre de terminal
npx astro add auth-astro

Pour installer astro-auth manuellement, installez le paquet requis pour votre gestionnaire de paquets :

Fenêtre de terminal
npm install auth-astro

Ensuite, appliquez l’intégration à votre fichier astro.config.* en utilisant la propriété integrations :

astro.config.mjs
import { defineConfig } from 'astro/config';
import auth from 'auth-astro';
export default defineConfig({
// ...
integrations: [auth()],
});

Créez un fichier auth.config.mjs dans le répertoire racine de votre projet. Ajoutez tous les providers ou méthodes d’authentification que vous souhaitez supporter, ainsi que toutes les variables d’environnement qu’ils requièrent.

auth.config.mjs
import GitHub from '@auth/core/providers/github';
import { defineConfig } from 'auth-astro';
export default defineConfig({
providers: [
GitHub({
clientId: import.meta.env.GITHUB_CLIENT_ID,
clientSecret: import.meta.env.GITHUB_CLIENT_SECRET,
}),
],
});

Créez un fichier .env à la racine de votre projet s’il n’existe pas déjà. Ajoutez les deux variables d’environnement suivantes. AUTH_SECRET doit être une chaîne privée avec un minimum de 32 caractères.

.env
AUTH_TRUST_HOST=true
AUTH_SECRET=<my-auth-secret>

Vous pouvez ajouter des boutons de connexion et de déconnexion en utilisant le module auth-astro/client dans une balise de script ou un composant de framework côté client.

src/pages/index.astro
---
import Layout from 'src/layouts/Base.astro';
---
<Layout>
<button id="login">Se connecter</button>
<button id="logout">Se déconnecter</button>
<script>
const { signIn, signOut } = await import("auth-astro/client")
document.querySelector("#login").onclick = () => signIn("github")
document.querySelector("#logout").onclick = () => signOut()
</script>
</Layout>

Vous pouvez récupérer la session de l’utilisateur en utilisant la méthode getSession.

src/pages/index.astro
---
import Layout from 'src/layouts/Base.astro';
import { getSession } from 'auth-astro/server';
const session = await getSession(Astro.request);
---
<Layout>
{
session ? (
<p>Bienvenue {session.user?.name}</p>
) : (
<p>Non connecté</p>
)
}
</Layout>