Seed et gestion des mots de passe
Seed la base, sécurise les mots de passe avec bcryptjs.
Accéder gratuitement à cette formation
Renseigne ton email pour débloquer immédiatement cette formation gratuite.
Dans cette leçon, tu vas apprendre à :
- Créer un script de seeding pour initialiser ta base SQLite.
- Hasher et comparer les mots de passe avec
bcryptjs. - Intégrer ce script dans tes commandes NPM.
On se concentre sur Prisma et la sécurité des mots de passe pour ton application Next.js 15.
Pourquoi seed et hashing ?
- Seeding : peupler ta base de données avec des données de développement répétables.
- Hashing : jamais stocker un mot de passe en clair !
- Workflow : on définit le seed, on ajoute le hash, on l’intègre dans
package.json, et on vérifie dans Prisma Studio.
Tip
Toujours versionner le code du seed, mais jamais la base dev.db.
1. Créer le fichier de seed
On place tout dans prisma/seed.ts. Ce script doit :
- supprimer les utilisateurs existants (
deleteMany). - créer un user avec mot de passe hashé.
1import { PrismaClient } from '@prisma/client'2import { hashPassword } from '../app/server/auth'34const prisma = new PrismaClient()56async function main() {7// On vide la table pour éviter les doublons8await prisma.user.deleteMany()910// Création d'un utilisateur pré-enregistré11const password = await hashPassword({ password: 'ABC123' })12await prisma.user.create({13data: {14email: 'virgile@allobax.fr',15password,16},17})1819console.log('🪴 Seed terminé !')20}2122main()23.catch(e => {24console.error(e)25process.exit(1)26})27.finally(async () => {28await prisma.$disconnect()29})
2. Installer et configurer bcryptjs
On utilise bcryptjs pour le hashing.
1npm install bcryptjs
Ensuite, dans ton module d’authentification (app/server/auth.ts), on factorise deux fonctions :
1import { hash, compare } from 'bcryptjs'23// Hachage avant stockage4export async function hashPassword({ password }: { password: string }) {5return await hash(password, 10)6}78// Comparaison lors du login9export async function comparePassword({10password,11hashedPassword,12}: {13password: string14hashedPassword: string15}) {16return await compare(password, hashedPassword)17}
10 rounds est un bon compromis dev/production.
3. Intégrer le seed dans package.json
Pour exécuter directement ton TypeScript via tsx, ajoute une dépendance dev :
1npm install -D tsx
Puis dans package.json :
1"scripts": {2- "seed": "node prisma/seed.js"3+ "seed": "tsx prisma/seed.ts"4}
Maintenant, lance ton script :
1npm run seed
Ouvre Prisma Studio pour vérifier que ton utilisateur est bien créé :
1npx prisma studio
4. Mettre à jour le seed après hashing
Si tu as déjà seedé sans hashing, il faut :
1- const rawPassword = 'ABC123'2- await prisma.user.create({3- data: { email: 'virgile@allobax.fr', password: rawPassword },4- })5+ const password = await hashPassword({ password: 'ABC123' })6+ await prisma.user.create({7+ data: { email: 'virgile@allobax.fr', password },8+ })
Cela garantit que la colonne password contient un hash, pas un texte en clair.
Bonnes pratiques
• Utilise deleteMany pour un seed idempotent.
• Ne versionne pas ta base dev.db ni tes secrets.
• Teste toujours dans Prisma Studio après le seed.
5. Récapitulatif des points clés
- Le seed est un script TS dans
prisma/seed.ts. - Hash le mot de passe avant
prisma.user.create(). - Utilise
bcryptjs(10 salt rounds). - Commande
npm run seedgrâce àtsx. - Vider la table avec
deleteManypour éviter les doublons.
Exercices rapides
- Ajouter un second user au seed : crée un utilisateur
test@example.com
avec mot de passetest123. - Changer le salt factor dans
hashPasswordà 12 et observer le temps de seed. - Créer un script
npm run reseedqui supprime aussi la tableHistoryItem
pour repartir à zéro en dev.