const bcrypt = require('bcryptjs'); const jwt = require('jsonwebtoken'); const User = require('../models/User'); // Inscription d'un nouvel utilisateur exports.register = async (req, res) => { try { const { username, email, password } = req.body; // Vérifier si l'utilisateur existe déjà let user = await User.findOne({ email }); if (user) { return res.status(400).json({ message: 'Cet utilisateur existe déjà' }); } // Créer un nouvel utilisateur user = new User({ username, email, password }); // Hashage du mot de passe const salt = await bcrypt.genSalt(10); user.password = await bcrypt.hash(password, salt); // Sauvegarder l'utilisateur dans la base de données await user.save(); // Générer un token JWT const payload = { user: { id: user.id } }; jwt.sign( payload, process.env.JWT_SECRET || 'secret', { expiresIn: '24h' }, (err, token) => { if (err) throw err; res.json({ token }); } ); } catch (err) { console.error(err.message); res.status(500).send('Erreur serveur'); } }; // Connexion d'un utilisateur exports.login = async (req, res) => { try { const { email, password } = req.body; // Vérifier si l'utilisateur existe const user = await User.findOne({ email }); if (!user) { return res.status(400).json({ message: 'Identifiants invalides' }); } // Vérifier le mot de passe const isMatch = await bcrypt.compare(password, user.password); if (!isMatch) { return res.status(400).json({ message: 'Identifiants invalides' }); } // Générer un token JWT const payload = { user: { id: user.id } }; jwt.sign( payload, process.env.JWT_SECRET || 'secret', { expiresIn: '24h' }, (err, token) => { if (err) throw err; res.json({ token }); } ); } catch (err) { console.error(err.message); res.status(500).send('Erreur serveur'); } }; // Récupérer les informations de l'utilisateur connecté exports.getMe = async (req, res) => { try { const user = await User.findById(req.user.id).select('-password'); res.json(user); } catch (err) { console.error(err.message); res.status(500).send('Erreur serveur'); } }; // Vérifier si des utilisateurs existent dans la base de données exports.checkUsersExist = async (req, res) => { try { const count = await User.countDocuments(); res.json({ usersExist: count > 0 }); } catch (err) { console.error(err.message); res.status(500).send('Erreur serveur'); } };