Checkpoint: Ajout de l'identifiant de connexion et modification du mot de passe dans la gestion des utilisateurs
Modifications apportées : - Ajout du champ username (identifiant de connexion) dans le schéma de la base de données avec contrainte UNIQUE - Mise à jour des procédures tRPC create et update pour gérer username et password - Implémentation du hashage du mot de passe avec bcryptjs dans createUser et updateUser - Ajout de la colonne "Identifiant" dans le tableau de la page de gestion des utilisateurs - Ajout des champs "Identifiant de connexion" et "Mot de passe" dans le formulaire de création - Ajout des champs "Identifiant de connexion" et "Nouveau mot de passe" dans le formulaire d'édition avec notes explicatives - Les mots de passe sont hashés avant d'être stockés en base de données pour la sécurité - Dans le formulaire d'édition, les champs username et password sont optionnels (laissez vide pour ne pas modifier)
This commit is contained in:
12
server/db.ts
12
server/db.ts
@@ -418,6 +418,12 @@ export async function createUser(data: InsertUser) {
|
||||
const db = await getDb();
|
||||
if (!db) throw new Error("Database not available");
|
||||
|
||||
// Hasher le mot de passe si fourni
|
||||
if (data.password) {
|
||||
const bcrypt = await import('bcryptjs');
|
||||
data.password = await bcrypt.hash(data.password, 10);
|
||||
}
|
||||
|
||||
const result = await db.insert(users).values(data);
|
||||
return result;
|
||||
}
|
||||
@@ -441,6 +447,12 @@ export async function updateUser(id: number, data: Partial<InsertUser>) {
|
||||
const db = await getDb();
|
||||
if (!db) throw new Error("Database not available");
|
||||
|
||||
// Hasher le mot de passe si fourni
|
||||
if (data.password) {
|
||||
const bcrypt = await import('bcryptjs');
|
||||
data.password = await bcrypt.hash(data.password, 10);
|
||||
}
|
||||
|
||||
await db.update(users).set(data).where(eq(users.id, id));
|
||||
}
|
||||
|
||||
|
||||
@@ -618,6 +618,8 @@ export const appRouter = router({
|
||||
openId: z.string().min(1),
|
||||
name: z.string().optional(),
|
||||
email: z.string().email().optional(),
|
||||
username: z.string().min(3).optional(),
|
||||
password: z.string().min(6).optional(),
|
||||
role: z.enum(["user", "admin"]).default("user"),
|
||||
isActive: z.boolean().default(true),
|
||||
})).mutation(async ({ input }) => {
|
||||
@@ -629,6 +631,8 @@ export const appRouter = router({
|
||||
id: z.number(),
|
||||
name: z.string().optional(),
|
||||
email: z.string().email().optional(),
|
||||
username: z.string().min(3).optional(),
|
||||
password: z.string().min(6).optional(),
|
||||
role: z.enum(["user", "admin"]).optional(),
|
||||
isActive: z.boolean().optional(),
|
||||
})).mutation(async ({ input }) => {
|
||||
|
||||
Reference in New Issue
Block a user