Rumah > Artikel > hujung hadapan web > API Pengesahan Pengguna dengan Express, JWT, Bcrypt dan MySQL
Aplikasi ini ialah pelayan pengesahan ringkas yang dibina dengan Express, menggunakan JSON Web Token (JWT) untuk pengurusan sesi dan bcrypt untuk menyimpan kata laluan dengan selamat. Pengguna boleh mendaftar dan log masuk untuk mengakses laluan yang dilindungi. MySQL digunakan untuk menyimpan data pengguna.
1. Express.js: Rangka kerja web untuk mengendalikan laluan dan perisian tengah.
2. bcrypt.js: Pustaka untuk mencincang kata laluan dengan selamat.
3. jsonwebtoken: Pustaka untuk mencipta dan mengesahkan token JWT.
4. mysql2: Pelanggan MySQL untuk Node.js dengan sokongan untuk Promises.
5. cookie-parser: Peranti tengah untuk menghuraikan kuki.
1. Import Perpustakaan Diperlukan
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());
/daftar
Laluan ini mendaftarkan pengguna baharu dengan mencincang kata laluan mereka dan menyimpannya dalam pangkalan data.
const express = require('express'); const jwt = require('jsonwebtoken'); const bcrypt = require('bcryptjs'); const cookieParser = require('cookie-parser'); const mysql = require('mysql2/promise');
/log masuk
Laluan ini log masuk pengguna sedia ada dengan menyemak kelayakan mereka dan menjana token JWT.
const app = express(); const PORT = 3000; const JWT_SECRET = 'your_jwt_secret_key';
Perisian tengah verifyToken memastikan bahawa hanya permintaan dengan token JWT yang sah boleh mengakses laluan yang dilindungi.
const db = await mysql.createConnection({ host: 'localhost', user: 'your_mysql_user', password: 'your_mysql_password', database: 'user_auth' });
Sampel laluan yang dilindungi hanya boleh diakses oleh pengguna yang disahkan. Ia mengembalikan salam yang diperibadikan menggunakan nama pengguna daripada token.
app.use(express.json()); app.use(cookieParser());
Pelayan mendengar pada PORT yang ditentukan.
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' }); } });
Aplikasi ini:
Atas ialah kandungan terperinci API Pengesahan Pengguna dengan Express, JWT, Bcrypt dan MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!