Files
zjpb.net/USER_SYSTEM_README.md
Jowe 2067fb1712 feat: v3.0 - 用户系统和收藏功能
核心功能:
- 用户注册/登录系统(用户名+密码)
- 工具收藏功能(一键收藏/取消收藏)
- 收藏分组管理(文件夹)
- 用户中心(个人资料、收藏列表)

数据库变更:
- 新增 users 表(用户信息)
- 新增 folders 表(收藏分组)
- 新增 collections 表(收藏记录)

安全增强:
- Admin 和 User 完全隔离
- 修复14个管理员路由的权限漏洞
- 所有管理功能添加用户类型检查

新增文件:
- templates/auth/register.html - 注册页面
- templates/auth/login.html - 登录页面
- templates/user/profile.html - 用户中心
- templates/user/collections.html - 收藏列表
- create_user_tables.py - 数据库迁移脚本
- USER_SYSTEM_README.md - 用户系统文档
- CHANGELOG_v3.0.md - 版本更新日志

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-06 19:19:05 +08:00

313 lines
7.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 用户注册登录和收藏功能实现说明
## 功能概述
本次更新为ZJPB项目添加了完整的用户系统包括
- ✅ 用户注册/登录(用户名+密码)
- ✅ 工具收藏功能
- ✅ 收藏分组管理(文件夹)
- ✅ 用户中心(个人资料、收藏列表)
- ✅ 多用户类型支持Admin和User
## 部署步骤
### 1. 创建数据库表
运行数据库迁移脚本创建新表:
```bash
python create_user_tables.py
```
这将创建以下表:
- `users` - 用户表
- `folders` - 收藏分组表
- `collections` - 收藏记录表
### 2. 启动应用
```bash
python app.py
```
或使用现有的启动方式。
## 功能说明
### 1. 用户注册
**访问路径:** `/register`
- 用户名至少3个字符
- 密码至少6个字符
- 注册成功后自动登录并跳转到首页
### 2. 用户登录
**访问路径:** `/login`
- 输入用户名和密码
- 登录成功后跳转到首页或之前访问的页面
### 3. 导航栏用户菜单
登录后,导航栏右侧会显示用户菜单:
- 显示用户名和头像(或首字母)
- 下拉菜单包含:
- 👤 个人中心
- ⭐ 我的收藏
- 🚪 退出登录
### 4. 收藏功能
**在工具详情页:**
- 登录后可看到"收藏"按钮
- 点击按钮收藏/取消收藏
- 已收藏时按钮变为金色
- 未登录时点击会提示登录
**前端页面:**
- detail_new.html - 添加了收藏按钮
- 自动检查登录状态和收藏状态
- Toast消息提示操作结果
### 5. 用户中心
**访问路径:** `/user/profile`
显示内容:
- 侧边栏:头像、用户名、个人简介、导航菜单
- 主内容区:
- 统计卡片(收藏数、文件夹数)
- 最近收藏列表最多5条
### 6. 我的收藏
**访问路径:** `/user/collections`
功能:
- 文件夹标签页切换
- 工具卡片网格展示
- 分页支持
- 空状态提示
## API端点
### 认证API
```
POST /register - 用户注册form
POST /login - 用户登录form
GET /logout - 用户登出
GET /api/auth/status - 获取登录状态JSON
```
### 收藏API需登录
```
POST /api/collections/toggle - 收藏/取消收藏
Body: { site_code: "12345678" }
GET /api/collections/status/:site_code - 查询收藏状态
Response: { is_collected: true/false, collection_id: 1, folder_id: null }
GET /api/collections/list - 获取收藏列表
Query: folder_id, page, per_page
Response: { collections: [...], total: 10, page: 1, ... }
PUT /api/collections/:id/note - 更新收藏备注
Body: { note: "备注内容" }
PUT /api/collections/:id/move - 移动收藏到文件夹
Body: { folder_id: 1 }
```
### 文件夹API需登录
```
GET /api/folders - 获取文件夹列表
POST /api/folders - 创建文件夹
Body: { name: "文件夹名", description: "", icon: "📁" }
PUT /api/folders/:id - 更新文件夹
Body: { name: "", description: "", icon: "", sort_order: 0 }
DELETE /api/folders/:id - 删除文件夹(级联删除收藏)
```
### 用户资料API需登录
```
PUT /api/user/profile - 更新用户资料
Body: { bio: "", avatar: "", is_public_profile: false }
```
## 数据库模型
### User用户表
| 字段 | 类型 | 说明 |
|------|------|------|
| id | Integer | 主键 |
| username | String(50) | 用户名(唯一) |
| password_hash | String(255) | 密码哈希 |
| email | String(100) | 邮箱(可选) |
| avatar | String(500) | 头像URL |
| bio | String(200) | 个人简介 |
| is_active | Boolean | 是否启用 |
| is_public_profile | Boolean | 是否公开资料 |
| created_at | DateTime | 创建时间 |
| last_login | DateTime | 最后登录时间 |
### Folder收藏分组表
| 字段 | 类型 | 说明 |
|------|------|------|
| id | Integer | 主键 |
| user_id | Integer | 用户ID |
| name | String(50) | 文件夹名称 |
| description | String(200) | 描述 |
| icon | String(50) | 图标emoji |
| sort_order | Integer | 排序权重 |
| is_public | Boolean | 是否公开 |
| public_slug | String(100) | 公开链接标识 |
| created_at | DateTime | 创建时间 |
### Collection收藏记录表
| 字段 | 类型 | 说明 |
|------|------|------|
| id | Integer | 主键 |
| user_id | Integer | 用户ID |
| site_id | Integer | 网站ID |
| folder_id | Integer | 文件夹ID可选 |
| note | Text | 备注 |
| created_at | DateTime | 创建时间 |
| updated_at | DateTime | 更新时间 |
## 技术实现
### 多用户类型支持
- Admin模型`get_id()` 返回 `"admin:{id}"`
- User模型`get_id()` 返回 `"user:{id}"`
- `user_loader` 根据前缀加载不同类型的用户
### 安全特性
- 密码使用 Werkzeug 的 `generate_password_hash` 加密
- 最短密码长度6位
- 最短用户名长度3位
- Flask-Login 管理会话
- 路由保护:`@login_required` 装饰器
- 用户类型检查:`isinstance(current_user, User)`
### 前端特性
- Tailwind CSS 设计风格复用admin_login.html
- JavaScript无侵入式增强
- 异步API调用Fetch
- Toast消息提示
- 响应式设计
## 文件清单
### 新增文件
```
templates/auth/register.html - 注册页面
templates/auth/login.html - 登录页面
templates/user/profile.html - 用户中心
templates/user/collections.html - 收藏列表
create_user_tables.py - 数据库迁移脚本
USER_SYSTEM_README.md - 本说明文档
```
### 修改文件
```
models.py - 添加User、Folder、Collection模型修改Admin.get_id()
app.py - 添加认证路由、收藏API、文件夹API、用户路由
templates/base_new.html - 更新导航栏,添加用户菜单
templates/detail_new.html - 添加收藏按钮和JavaScript
```
## 测试步骤
1. **用户注册流程**
- 访问 `/register`
- 输入用户名和密码
- 提交表单
- 验证自动登录成功
2. **用户登录流程**
- 访问 `/login`
- 输入正确的用户名和密码
- 验证登录成功并跳转
3. **收藏功能**
- 登录后访问任意工具详情页
- 点击"收藏"按钮
- 验证按钮状态变为"已收藏"
- 再次点击取消收藏
4. **我的收藏**
- 访问 `/user/collections`
- 验证收藏的工具显示正确
- 测试文件夹切换
5. **用户中心**
- 访问 `/user/profile`
- 验证统计数据正确
- 验证最近收藏列表
## 后续优化方向
### 已实现的MVP功能
- ✅ 基础注册登录
- ✅ 收藏/取消收藏
- ✅ 收藏列表展示
- ✅ 基础文件夹管理
### 待实现的增强功能
- ⏳ 收藏备注编辑UI
- ⏳ 文件夹拖拽移动
- ⏳ 批量收藏操作
- ⏳ 收藏导出CSV/JSON
- ⏳ 公开收藏列表(分享)
- ⏳ 收藏统计图表
- ⏳ 邮箱验证
- ⏳ 忘记密码
- ⏳ 头像上传
- ⏳ 第三方登录
## 注意事项
1. **管理员与普通用户分离**
- 管理员账号无法使用收藏功能
- 管理员登录入口:`/admin/login`
- 普通用户登录入口:`/login`
2. **数据完整性**
- 删除用户会级联删除其所有收藏和文件夹
- 删除文件夹会级联删除其中的收藏记录
- 删除网站不会删除相关收藏(保留历史记录)
3. **性能优化**
- 收藏列表查询使用了join避免N+1问题
- 添加了必要的数据库索引
- 分页支持大量收藏
## 技术支持
如有问题,请查看:
- Flask-Login 文档https://flask-login.readthedocs.io/
- SQLAlchemy 文档https://docs.sqlalchemy.org/
- Tailwind CSS 文档https://tailwindcss.com/
---
**版本:** v1.0
**更新日期:** 2025-02-06
**作者:** Claude Sonnet 4.5