Cette application est un simple serveur d'authentification construit avec Express, utilisant des jetons Web JSON (JWT) pour la gestion des sessions et bcrypt pour stocker en toute sécurité les mots de passe. Les utilisateurs peuvent s'inscrire et se connecter pour accéder aux itinéraires protégés. MySQL est utilisé pour stocker les données utilisateur.
1. Express.js : Framework Web pour la gestion des routes et des middlewares.
2. bcrypt.js : Bibliothèque pour hacher les mots de passe en toute sécurité.
3. jsonwebtoken : bibliothèque pour créer et vérifier des jetons JWT.
4. mysql2 : client MySQL pour Node.js avec prise en charge de Promises.
5. cookie-parser : Middleware pour analyser les cookies.
1. Importer les bibliothèques requises
const express = require('express'); const jwt = require('jsonwebtoken'); const bcrypt = require('bcryptjs'); const cookieParser = require('cookie-parser'); const mysql = require('mysql2/promise');
const app = express(); const PORT = 3000; const JWT_SECRET = 'your_jwt_secret_key';
const db = await mysql.createConnection({ host: 'localhost', user: 'your_mysql_user', password: 'your_mysql_password', database: 'user_auth' });
app.use(express.json()); app.use(cookieParser());
/s'inscrire
Cet itinéraire enregistre un nouvel utilisateur en hachant son mot de passe et en l'enregistrant dans la base de données.
const express = require('express'); const jwt = require('jsonwebtoken'); const bcrypt = require('bcryptjs'); const cookieParser = require('cookie-parser'); const mysql = require('mysql2/promise');
/connexion
Cette route connecte un utilisateur existant en vérifiant ses informations d'identification et en générant un jeton JWT.
const app = express(); const PORT = 3000; const JWT_SECRET = 'your_jwt_secret_key';
Le middleware verifyToken garantit que seules les requêtes avec un jeton JWT valide peuvent accéder aux routes protégées.
const db = await mysql.createConnection({ host: 'localhost', user: 'your_mysql_user', password: 'your_mysql_password', database: 'user_auth' });
Un exemple d'itinéraire protégé accessible uniquement aux utilisateurs authentifiés. Il renvoie un message d'accueil personnalisé utilisant le nom de l'utilisateur du jeton.
app.use(express.json()); app.use(cookieParser());
Le serveur écoute sur le PORT défini.
app.post('/register', async (req, res) => { const { name, email, password } = req.body; try { // Check if user already exists const [rows] = await db.execute('SELECT * FROM users WHERE email = ?', [email]); if (rows.length > 0) { return res.status(400).json({ message: 'User already exists' }); } // Hash the password const hashedPassword = await bcrypt.hash(password, 10); // Save the user in the database await db.execute('INSERT INTO users (name, email, password) VALUES (?, ?, ?)', [name, email, hashedPassword]); res.status(201).json({ message: 'User registered successfully!' }); } catch (error) { console.error(error); res.status(500).json({ message: 'Server error' }); } });
app.post('/login', async (req, res) => { const { email, password } = req.body; try { // Find user const [rows] = await db.execute('SELECT * FROM users WHERE email = ?', [email]); const user = rows[0]; if (!user) { return res.status(400).json({ message: 'User not found' }); } // Check password const isMatch = await bcrypt.compare(password, user.password); if (!isMatch) { return res.status(400).json({ message: 'Invalid credentials' }); } // Create JWT token const token = jwt.sign({ id: user.id, name: user.name, email: user.email }, JWT_SECRET, { expiresIn: '1h' }); // Set JWT in cookie res.cookie('token', token, { httpOnly: true, secure: process.env.NODE_ENV === 'production', sameSite: 'Strict', maxAge: 3600000 // 1 hour }); res.json({ message: 'Logged in successfully!' }); } catch (error) { console.error(error); res.status(500).json({ message: 'Server error' }); } });
Cette application :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!