一个全栈用户账户管理系统(用户中心),提供注册、邮箱验证、登录、密码重置、个人资料管理等功能。
| 层级 | 技术 |
|---|---|
| 前端 | Vite 6 + React 19 + React Router 7 + TypeScript |
| 后端 | Express 5 + TypeScript |
| 数据库 | PostgreSQL |
| 认证 | JWT (jsonwebtoken) |
| 密码加密 | bcryptjs |
| 邮件服务 | Resend |
| 国际化 | i18next + react-i18next |
- 用户注册 — 用户名 + 邮箱 + 密码,注册后发送 6 位验证码到邮箱
- 邮箱验证 — 通过验证码完成邮箱验证,验证后可登录
- 用户登录 — 支持用户名或邮箱登录,未验证邮箱无法登录
- 密码重置 — 两步流程:发送验证码 → 输入验证码重置密码
- 个人资料管理 — 编辑头像、用户名、简介、性别、生日等信息
- 邮箱更换 — 两步验证流程更换绑定邮箱
- 公开用户主页 — 通过 UID 访问公开用户资料页面
- 国际化 — 支持中文 (zh) 和英文 (en),语言通过 URL 路径区分
- UID 系统 — 每个用户拥有独立的数字 UID(从 100001 起),用于公开资料页面
Account_System/
├── package.json # 根目录脚本与共享依赖
├── .env.example # 环境变量模板
├── .gitignore
├── scripts/
│ ├── init-db.ts # 数据库初始化脚本
│ ├── seed.ts # 测试数据填充脚本
│ └── add-profile-fields.sql
├── backend/
│ └── src/
│ ├── index.ts # Express 入口
│ ├── config.ts # 环境变量配置
│ ├── db.ts # PostgreSQL 连接池
│ ├── middleware/ # JWT 认证、错误处理中间件
│ ├── routes/ # API 路由(auth、user、verify)
│ ├── services/ # 业务逻辑(邮件、验证码、用户 CRUD)
│ └── utils/ # 工具函数(响应格式化、密码哈希)
└── frontend/
└── src/
├── App.tsx # 路由定义与布局
├── api/ # Axios API 调用封装
├── hooks/ # AuthContext 认证状态管理
├── pages/ # 页面组件(登录、注册、个人资料等)
├── i18n/ # 国际化翻译文件
└── styles/ # 全局样式
- Node.js (含 npm)
- PostgreSQL 数据库
-
安装依赖
npm run install:all
-
配置环境变量
复制
.env.example为.env,并填写以下配置:DB_HOST=localhost DB_PORT=5432 DB_USER=your_user DB_PASSWORD=your_password DB_NAME=account_system PORT=3333 JWT_SECRET=your_jwt_secret RESEND_API_KEY=your_resend_api_key EMAIL_FROM=noreply@yourdomain.com
-
初始化数据库
npm run init-db
该命令会创建
account_system数据库及users、verification_codes表。 -
(可选)填充测试数据
npm run seed
创建两个测试用户:
testuser(已验证,密码:password123)unverified(未验证,密码:password123)
-
启动开发服务器
npm run dev
后端运行在
http://localhost:3333,前端运行在http://localhost:5173。
| 方法 | 路径 | 认证 | 说明 |
|---|---|---|---|
| POST | /api/auth/register |
否 | 用户注册 |
| POST | /api/auth/verify-email |
否 | 邮箱验证 |
| POST | /api/auth/login |
否 | 用户登录 |
| POST | /api/auth/forgot-password |
否 | 发送密码重置验证码 |
| POST | /api/auth/reset-password |
否 | 重置密码 |
| GET | /api/users/profile/:uid |
否 | 获取公开用户资料 |
| GET | /api/users/me |
JWT | 获取当前用户信息 |
| PUT | /api/users/me |
JWT | 更新用户资料 |
| POST | /api/users/me/avatar |
JWT | 上传头像 |
| POST | /api/users/me/request-email-change |
JWT | 发送邮箱更换验证码 |
| POST | /api/users/me/confirm-email-change |
JWT | 确认邮箱更换 |
| GET | /api/health |
否 | 健康检查 |
MIT