Checkpoint: Ajout de la fonctionnalité complète de réinitialisation de mot de passe avec génération de tokens temporaires (24h), stockage en base de données, et envoi d'emails automatiques. Nouveau bouton dans la page de gestion des utilisateurs avec dialogue de confirmation.
This commit is contained in:
48
server/db.ts
48
server/db.ts
@@ -8,6 +8,8 @@ import {
|
||||
sequences,
|
||||
datesFormation,
|
||||
inscriptions,
|
||||
passwordResetTokens,
|
||||
InsertPasswordResetToken,
|
||||
InsertFormation,
|
||||
InsertApprenant,
|
||||
InsertSequence,
|
||||
@@ -419,3 +421,49 @@ export async function deleteUser(id: number) {
|
||||
|
||||
await db.delete(users).where(eq(users.id, id));
|
||||
}
|
||||
|
||||
|
||||
// ==================== GESTION DES TOKENS DE RÉINITIALISATION ====================
|
||||
|
||||
export async function createPasswordResetToken(userId: number, token: string, expiresAt: Date) {
|
||||
const db = await getDb();
|
||||
if (!db) throw new Error("Database not available");
|
||||
|
||||
const result = await db.insert(passwordResetTokens).values({
|
||||
userId,
|
||||
token,
|
||||
expiresAt,
|
||||
used: false,
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
export async function getPasswordResetToken(token: string) {
|
||||
const db = await getDb();
|
||||
if (!db) return undefined;
|
||||
|
||||
const result = await db.select()
|
||||
.from(passwordResetTokens)
|
||||
.where(eq(passwordResetTokens.token, token))
|
||||
.limit(1);
|
||||
|
||||
return result.length > 0 ? result[0] : undefined;
|
||||
}
|
||||
|
||||
export async function markTokenAsUsed(tokenId: number) {
|
||||
const db = await getDb();
|
||||
if (!db) throw new Error("Database not available");
|
||||
|
||||
await db.update(passwordResetTokens)
|
||||
.set({ used: true })
|
||||
.where(eq(passwordResetTokens.id, tokenId));
|
||||
}
|
||||
|
||||
export async function deleteExpiredTokens() {
|
||||
const db = await getDb();
|
||||
if (!db) throw new Error("Database not available");
|
||||
|
||||
const now = new Date();
|
||||
await db.delete(passwordResetTokens)
|
||||
.where(sql`${passwordResetTokens.expiresAt} < ${now}`);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user