小王: 嗨,小李,最近我们学校正在开发一个统一身份认证系统,你觉得我们应该从哪里开始呢?
小李: 首先,我们需要设计一个数据库模型来存储用户信息,比如用户名、密码等。
小王: 那么这个数据库应该包含哪些表呢?
小李: 我们可以创建一个Users表,用于存储用户的基本信息。表结构如下:
CREATE TABLE Users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
小王: 明白了,接下来我们需要编写后端API来处理登录请求。你能给我一个示例吗?
小李: 当然,我们可以使用Express框架来快速搭建后端服务。这里是一个简单的登录API示例:
const express = require('express');
const bcrypt = require('bcryptjs');
const app = express();
app.use(express.json());
app.post('/login', async (req, res) => {
const { username, password } = req.body;
try {
const user = await Users.findOne({ where: { username } });
if (!user) return res.status(401).send("User not found");
const isValidPassword = await bcrypt.compare(password, user.password);
if (!isValidPassword) return res.status(401).send("Invalid credentials");
// 成功登录,返回token
res.status(200).json({ message: "Login successful" });
} catch (error) {
res.status(500).send("Internal Server Error");
}
});
app.listen(3000, () => console.log('Server running on port 3000'));
小王: 这样我们就有了基本的登录功能。下一步是什么?
小李: 接下来我们需要考虑如何安全地存储密码。使用bcrypt进行密码哈希是一个不错的选择。
小王: 好的,那么如何确保密码的安全性呢?
小李: 我们可以在用户注册时使用bcrypt对密码进行哈希处理,并且在登录时进行比较。这样即使数据库被泄露,攻击者也无法直接获取用户的明文密码。