Node.js-数据库与身份认证
// 引入所需模块
const express = require('express');
const bodyParser = require('body-parser');
const bcrypt = require('bcrypt');
const jwt = require('jsonwebtoken');
const { Pool } = require('pg');
// 创建 Express 应用
const app = express();
app.use(bodyParser.json());
// 连接 PostgreSQL 数据库
const pool = new Pool({
user: 'youruser',
host: 'localhost',
database: 'yourdatabase',
password: 'yourpassword',
port: 5432,
});
// 用户注册接口
app.post('/register', async (req, res) => {
try {
const { username, password } = req.body;
// 密码加盐处理
const salt = await bcrypt.genSalt(10);
const hashedPassword = await bcrypt.hash(password, salt);
const query = `INSERT INTO users (username, password) VALUES ($1, $2) RETURNING id`;
const { rows } = await pool.query(query, [username, hashedPassword]);
const userId = rows[0].id;
res.json({ id: userId });
} catch (error) {
res.status(500).send('Server error');
}
});
// 用户登录接口
app.post('/login', async (req, res) => {
try {
const { username, password } = req.body;
const query = `SELECT id, password FROM users WHERE username = $1`;
const { rows } = await pool.query(query, [username]);
if (rows.length === 0) {
return res.status(401).send('Invalid credentials');
}
const user = rows[0];
const isPasswordValid = await bcrypt.compare(password, user.password);
if (!isPasswordValid) {
return res.status(401).send('Invalid credentials');
}
// 生成 JWT token
const token = jwt.sign({ userId: user.id }, 'secret', { expiresIn: '1h' });
res.json({ token });
} catch (error) {
res.status(500).send('Server error');
}
});
// 启动服务器
const PORT = 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
在这个代码实例中,我们使用了 express
框架来创建一个简单的 Web 服务器,并使用 body-parser
中间件来处理 JSON 请求体。我们还使用了 bcrypt
来安全地处理密码,jsonwebtoken
来生成 JWT 令牌,以及 pg
库来与 PostgreSQL 数据库进行交互。这个示例提供了用户注册和登录的接口,并在接口中实现了基本的错误处理和安全性措施。
评论已关闭