Checkpoint: Migration complète vers l'authentification locale avec email/mot de passe
✅ Modifications apportées : - Remplacement de l'authentification OAuth Manus par un système local - Ajout des champs email, password, emailVerified dans la table users - Implémentation du hashage des mots de passe avec bcrypt - Création des procédures auth.login et auth.register - Mise à jour du système de context pour utiliser JWT - Création des pages de connexion et d'inscription - Mise à jour de la page AdminUsers pour créer des utilisateurs avec mot de passe - Ajout de la protection des routes d'administration (vérification du rôle admin) ✅ Tests effectués : - Connexion avec email/mot de passe ✓ - Création d'utilisateurs via l'interface d'administration ✓ - Protection des routes (seuls les admins peuvent accéder au dashboard) ✓ - Redirection automatique après connexion ✓ Note : Les fichiers OAuth Manus originaux ont été conservés pour référence mais ne sont plus utilisés.
This commit is contained in:
@@ -41,9 +41,9 @@ export default function AdminUsers() {
|
||||
const [resetPasswordDialogOpen, setResetPasswordDialogOpen] = useState(false);
|
||||
const [selectedUser, setSelectedUser] = useState<any>(null);
|
||||
const [createForm, setCreateForm] = useState({
|
||||
openId: "",
|
||||
name: "",
|
||||
email: "",
|
||||
password: "",
|
||||
role: "user" as "user" | "admin",
|
||||
});
|
||||
const [editForm, setEditForm] = useState({
|
||||
@@ -60,9 +60,9 @@ export default function AdminUsers() {
|
||||
refetch();
|
||||
setCreateDialogOpen(false);
|
||||
setCreateForm({
|
||||
openId: "",
|
||||
name: "",
|
||||
email: "",
|
||||
password: "",
|
||||
role: "user",
|
||||
});
|
||||
},
|
||||
@@ -118,15 +118,19 @@ export default function AdminUsers() {
|
||||
};
|
||||
|
||||
const handleSaveCreate = () => {
|
||||
if (!createForm.openId) {
|
||||
toast.error("L'identifiant OpenID est obligatoire");
|
||||
if (!createForm.email) {
|
||||
toast.error("L'email est obligatoire");
|
||||
return;
|
||||
}
|
||||
if (!createForm.password) {
|
||||
toast.error("Le mot de passe est obligatoire");
|
||||
return;
|
||||
}
|
||||
|
||||
createMutation.mutate({
|
||||
openId: createForm.openId,
|
||||
email: createForm.email,
|
||||
password: createForm.password,
|
||||
name: createForm.name || undefined,
|
||||
email: createForm.email || undefined,
|
||||
role: createForm.role,
|
||||
isActive: true,
|
||||
});
|
||||
@@ -373,12 +377,13 @@ export default function AdminUsers() {
|
||||
|
||||
<div className="space-y-4">
|
||||
<div>
|
||||
<Label htmlFor="createOpenId">Identifiant OpenID *</Label>
|
||||
<Label htmlFor="createPassword">Mot de passe *</Label>
|
||||
<Input
|
||||
id="createOpenId"
|
||||
value={createForm.openId}
|
||||
onChange={(e) => setCreateForm({ ...createForm, openId: e.target.value })}
|
||||
placeholder="Identifiant unique de l'utilisateur"
|
||||
id="createPassword"
|
||||
type="password"
|
||||
value={createForm.password}
|
||||
onChange={(e) => setCreateForm({ ...createForm, password: e.target.value })}
|
||||
placeholder="Mot de passe de l'utilisateur"
|
||||
/>
|
||||
</div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user