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})
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.
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
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.com
test123
.hashPassword
à 12 et observer le temps de seed.npm run reseed
qui supprime aussi la table HistoryItem