# 实现用户注册与登录功能

URL: https://caijiao.org/mongodb/10-project/03-auth
Source: docs/mongodb/10-project/03-auth.md
Description: 本章节讲解如何使用 MongoDB 实现用户注册与登录功能，包括数据模型设计、密码加密和基本验证流程。

用户注册与登录是大多数应用的基础功能，合理设计和实现该功能保证安全性和用户体验。

## 用户数据模型设计

设计用户文档结构，常见字段包括：

```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](/mongodb/) 可以高效支持用户注册与登录功能的实现。
