Le Défi de l'Authentification Hybride
Dans notre écosystème CriloCom, la gestion des utilisateurs repose sur un couplage robuste entre Firebase Auth (pour la sécurité et les sessions) et BigQuery (pour la persistance et l'analyse). Cependant, même avec des outils de classe entreprise, le diable se cache dans les détails.
L'une des erreurs les plus insidieuses que nous avons rencontrées récemment est le rejet d'une requête de création d'utilisateur par le Firebase Admin SDK, se manifestant par une Firebase: Error (auth/argument-error).
Anatomie du Problème
Lorsqu'un administrateur crée un compte pour un nouveau stagiaire ou formateur, certains champs comme le nom d'affichage (displayName) peuvent être facultatifs. L'approche naïve consisterait à transmettre l'objet tel quel :
const userRecord = await adminAuth.createUser({
email: data.email,
password: data.password || generateSecurePassword(),
displayName: data.displayName, // ❌ Danger si vide !
});
Si data.displayName est une chaîne vide (""), l'API Firebase Admin la rejette. L'API attend soit une chaîne non vide valide, soit l'absence totale du paramètre. La transmission explicite d'une chaîne vide déclenche une violation des arguments attendus.
La Solution Élégante
Pour garantir la robustesse de l'application et une expérience utilisateur sans friction pour les administrateurs, il est impératif d'adopter une approche de construction dynamique de la charge utile (payload).
const authData: any = {
email: data.email,
password: data.password || generateSecurePassword(),
};
// Injection conditionnelle du champ displayName
if (data.displayName && data.displayName.trim() !== '') {
authData.displayName = data.displayName;
}
const userRecord = await adminAuth.createUser(authData);
Leçons à Retenir
- Ne faites jamais confiance aux données d'interface : Même dans un environnement strictement typé avec TypeScript, une chaîne vide "" est un string valide pour TS, mais invalide pour Firebase.
- Construction conditionnelle : Pour les SDK stricts, privilégiez la construction incrémentale des objets d'options plutôt que l'assignation directe avec des valeurs potentiellement vides ou undefined.
- Séparation des responsabilités : Une fois Firebase satisfait, n'oubliez pas d'enregistrer la véritable donnée brute dans votre base de données relationnelle ou analytique (BigQuery dans notre cas) pour une traçabilité totale.
L'authentification est la porte d'entrée de toute application B2B. Assurer sa stabilité absolue est la première étape vers la confiance de vos utilisateurs.