主题
实现用户注册与登录功能
用户注册与登录是大多数应用的基础功能,合理设计和实现该功能保证安全性和用户体验。
用户数据模型设计
设计用户文档结构,常见字段包括:
json
{
"username": "string",
"email": "string",
"password": "string", // 存储加密后的密码
"createdAt": "date",
"lastLogin": "date"
}
密码加密
- 使用 bcrypt 或其他加密算法对密码进行哈希存储,避免明文保存。
- 注册时对用户输入密码进行加密后存储。
- 登录时对比加密密码验证身份。
注册流程示例(Node.js + Mongoose)
js
const bcrypt = require('bcrypt');
const User = require('./models/User'); // 假设已有 User 模型
async function register(username, email, password) {
const existingUser = await User.findOne({ email });
if (existingUser) throw new Error('Email already exists');
const hashedPassword = await bcrypt.hash(password, 10);
const user = new User({ username, email, password: hashedPassword, createdAt: new Date() });
await user.save();
return user;
}
登录流程示例
js
async function login(email, password) {
const user = await User.findOne({ email });
if (!user) throw new Error('User not found');
const valid = await bcrypt.compare(password, user.password);
if (!valid) throw new Error('Invalid password');
// 更新最后登录时间
user.lastLogin = new Date();
await user.save();
return user;
}
安全建议
- 使用 HTTPS 确保数据传输安全。
- 实现登录失败限制和验证码防止暴力破解。
- 使用 JWT 或 session 管理用户身份。
通过合理设计数据模型和安全措施,MongoDB 可以高效支持用户注册与登录功能的实现。