Seed la base, sécurise les mots de passe avec bcryptjs.
Renseigne ton email pour débloquer immédiatement cette formation gratuite.
Dans cette leçon, tu vas apprendre à :
bcryptjs.On se concentre sur Prisma et la sécurité des mots de passe pour ton application Next.js 15.
package.json, et on vérifie dans Prisma Studio.Toujours versionner le code du seed, mais jamais la base dev.db.
On place tout dans prisma/seed.ts. Ce script doit :
deleteMany).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})
bcryptjsOn 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.
package.jsonPour 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
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.
• 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.
prisma/seed.ts.prisma.user.create().bcryptjs (10 salt rounds).npm run seed grâce à tsx.deleteMany pour éviter les doublons.test@example.comtest123.hashPassword à 12 et observer le temps de seed.npm run reseed qui supprime aussi la table HistoryItem