From 9c3d3ef18d5d0bccbdfb640a42f30633cd3dd4c8 Mon Sep 17 00:00:00 2001 From: Manus Date: Tue, 21 Apr 2026 06:29:48 -0400 Subject: [PATCH] =?UTF-8?q?Checkpoint:=20Correction=20du=20login=20:=20rou?= =?UTF-8?q?ters.ts=20utilise=20maintenant=20input.identifier=20au=20lieu?= =?UTF-8?q?=20de=20input.email,=20LocalAuthContext.tsx=20mis=20=C3=A0=20jo?= =?UTF-8?q?ur=20en=20cons=C3=A9quence.=20La=20connexion=20par=20username?= =?UTF-8?q?=20(adminItinova)=20fonctionne=20en=20recette.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/public/__manus__/version.json | 4 ++-- client/src/contexts/LocalAuthContext.tsx | 11 ++++++----- server/routers.ts | 4 ++-- todo.md | 11 ++++++----- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/client/public/__manus__/version.json b/client/public/__manus__/version.json index 3a7d148..3eead99 100644 --- a/client/public/__manus__/version.json +++ b/client/public/__manus__/version.json @@ -1,4 +1,4 @@ { - "version": "59dcc8d3", - "timestamp": 1776763904784 + "version": "cf6f7264", + "timestamp": 1776767388974 } \ No newline at end of file diff --git a/client/src/contexts/LocalAuthContext.tsx b/client/src/contexts/LocalAuthContext.tsx index 6131396..64cff64 100644 --- a/client/src/contexts/LocalAuthContext.tsx +++ b/client/src/contexts/LocalAuthContext.tsx @@ -1,17 +1,18 @@ -import { createContext, useContext, useState, useEffect, ReactNode } from "react"; +import { createContext, useContext, useState, ReactNode } from "react"; import { trpc } from "@/lib/trpc"; interface LocalUser { id: number; name: string; - email: string; + username: string | null; + email: string | null; role: "admin" | "user" | "readonly"; } interface LocalAuthContextType { user: LocalUser | null; loading: boolean; - login: (email: string, password: string) => Promise; + login: (identifier: string, password: string) => Promise; logout: () => Promise; isAuthenticated: boolean; } @@ -34,10 +35,10 @@ export function LocalAuthProvider({ children }: { children: ReactNode }) { const loginMutation = trpc.auth.localLogin.useMutation(); const logoutMutation = trpc.auth.localLogout.useMutation(); - const login = async (email: string, password: string) => { + const login = async (identifier: string, password: string) => { setLoading(true); try { - const result = await loginMutation.mutateAsync({ email, password }); + const result = await loginMutation.mutateAsync({ identifier, password }); const localUser = result.user as LocalUser; setUser(localUser); localStorage.setItem(LOCAL_USER_KEY, JSON.stringify(localUser)); diff --git a/server/routers.ts b/server/routers.ts index 2a9598c..ea12b04 100644 --- a/server/routers.ts +++ b/server/routers.ts @@ -50,9 +50,9 @@ export const appRouter = router({ }), // Connexion locale localLogin: publicProcedure - .input(z.object({ email: z.string().min(1), password: z.string().min(1) })) + .input(z.object({ identifier: z.string().min(1), password: z.string().min(1) })) .mutation(async ({ input, ctx }) => { - const result = await loginLocalUser(input.email, input.password); + const result = await loginLocalUser(input.identifier, input.password); // Stocker le token dans un cookie const cookieOptions = getSessionCookieOptions(ctx.req); ctx.res.cookie("veille_local_auth", result.token, { diff --git a/todo.md b/todo.md index a1a681d..e10c51e 100644 --- a/todo.md +++ b/todo.md @@ -55,8 +55,9 @@ - [x] Menu "Boîte à idées" dans la sidebar accessible à tous les utilisateurs ## Authentification username -- [ ] BDD : ajouter colonne username (unique, nullable) dans la table users -- [ ] Backend : loginLocalUser cherche par username OU email -- [ ] Backend : createLocalUser accepte username optionnel -- [ ] Frontend : page Gestion utilisateurs affiche et permet de saisir le username -- [ ] Mettre à jour le compte adminItinova avec username = adminItinova +- [x] BDD : ajouter colonne username (unique, nullable) dans la table users +- [x] Backend : loginLocalUser cherche par username OU email +- [x] Backend : createLocalUser accepte username optionnel +- [x] Frontend : page Gestion utilisateurs affiche et permet de saisir le username +- [x] Mettre à jour le compte adminItinova avec username = adminItinova +- [x] Migration BDD recette : ajouter colonne username dans local_users et recréer compte adminItinova