the-tip-top-backend/scripts/diagnose-auth.js
2025-11-17 23:47:54 +01:00

63 lines
2.1 KiB
JavaScript

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();