此應用程式是使用 Express 建置的簡單驗證伺服器,使用 JSON Web 令牌 (JWT) 進行會話管理,並使用 bcrypt 安全儲存密碼。用戶可以註冊並登入來存取受保護的路由。 MySQL用於儲存使用者資料。
1。 Express.js:用於處理路由和中間件的 Web 框架。
2. bcrypt.js:用於安全地散列密碼的函式庫。
3. jsonwebtoken:用於建立和驗證 JWT 令牌的函式庫。
4. mysql2:Node.js 的 MySQL 用戶端,支援 Promises。
5. cookie-parser:用於解析 cookie 的中間件。
1。導入所需的庫
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());
/註冊
該路由透過散列密碼並將其保存在資料庫中來註冊新用戶。
const express = require('express'); const jwt = require('jsonwebtoken'); const bcrypt = require('bcryptjs'); const cookieParser = require('cookie-parser'); const mysql = require('mysql2/promise');
/登入
此路由透過檢查現有使用者的憑證並產生 JWT 令牌來登入現有使用者。
const app = express(); const PORT = 3000; const JWT_SECRET = 'your_jwt_secret_key';
verifyToken 中間件確保只有具有有效 JWT 令牌的請求才能存取受保護的路由。
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());
伺服器監聽定義的連接埠。
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' }); } });
此應用程式:
以上是使用 Express、JWT、Bcrypt 和 MySQL 的使用者驗證 API的詳細內容。更多資訊請關注PHP中文網其他相關文章!