此应用程序是一个使用 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中文网其他相关文章!