import { pool } from '../db.js'; import jwt from 'jsonwebtoken'; async function diagnoseAuth() { console.log('🔍 Diagnostic de l\'authentification\n'); try { // 1. Vérifier les utilisateurs const users = await pool.query('SELECT id, email, role, email_verified FROM users'); console.log(`✅ Nombre d'utilisateurs: ${users.rows.length}`); console.log('\nUtilisateurs:'); users.rows.forEach(u => { console.log(` - ${u.email} (${u.role}) ${u.email_verified ? '✓ vérifié' : '✗ non vérifié'}`); }); // 2. Vérifier le JWT_SECRET console.log('\n📝 Configuration:'); console.log(` JWT_SECRET: ${process.env.JWT_SECRET ? '✓ défini' : '✗ manquant'}`); // 3. Test de génération de token if (users.rows.length > 0) { const testUser = users.rows[0]; const token = jwt.sign( { id: testUser.id, email: testUser.email, role: testUser.role }, process.env.JWT_SECRET, { expiresIn: '7d' } ); console.log(`\n🔑 Token de test généré pour ${testUser.email}:`); console.log(` ${token.substring(0, 50)}...`); // Vérifier le token try { const decoded = jwt.verify(token, process.env.JWT_SECRET); console.log(` ✓ Token valide`); console.log(` Payload:`, decoded); } catch (error) { console.log(` ✗ Erreur de vérification:`, error.message); } } // 4. Vérifier la structure de la table users const tableInfo = await pool.query(` SELECT column_name, data_type, is_nullable FROM information_schema.columns WHERE table_name = 'users' ORDER BY ordinal_position `); console.log('\n📊 Structure de la table users:'); tableInfo.rows.forEach(col => { console.log(` - ${col.column_name}: ${col.data_type} ${col.is_nullable === 'NO' ? 'NOT NULL' : 'NULL'}`); }); console.log('\n✅ Diagnostic terminé'); process.exit(0); } catch (error) { console.error('❌ Erreur:', error.message); console.error(error.stack); process.exit(1); } } diagnoseAuth();