进度 (Progress)
已完成的工作
- 项目初始化: 根据
sp_website_solution.md和supabase_solution.md进行了项目结构调整。 - 前端集成:
- 创建了
static/目录。 - 更新了
static/index.html,添加了用户注册和登录表单,并修正了静态文件引用路径。 - 创建了
static/style.css。 - 更新了
static/app.js,添加了用户认证状态管理、注册/登录/退出方法,以及在认证后获取代理数据的方法。在成功登录后,将用户认证凭证(API Key)存储在本地存储中。同时,添加了获取用户电子邮件和修改密码的逻辑。 - 解决了
static/login.html和static/reset-password.html页面中所有autocomplete属性相关的 DOM 警告。 - 修改了
static/reset-password.html的前端逻辑,使其不再依赖reset_token,而是通过邮箱和验证码重置密码。 - 在
static/js/auth.js中添加了sendResetVerificationCode和resetPasswordWithCode方法,并更新了authMounted逻辑。
- 创建了
- 后端集成:
- 更新了
requirements.txt,添加了supabase和python-dotenv依赖。 - 修改了
app.py,使其能够提供静态文件服务,集成了python-dotenv来加载环境变量,集成了 Supabase 客户端初始化,添加了/api/auth/signup和/api/auth/loginAPI 端点,用于用户注册和登录,添加了/api/user/generate-api-key端点用于生成 API Key,添加了/api/user/api-keys端点用于获取 API Key 列表,添加了/api/user/me端点用于获取当前登录用户的电子邮件,添加了/api/auth/change-password端点用于用户修改密码,并修改了/api/proxies示例 API 端点使其需要用户认证,并将表名修改为sp_proxies。 - 恢复了
app.py中的signup端点,使其使用supabase.auth.sign_up进行用户注册,而不是管理员创建用户。 - 创建了
static/login.html,用于独立的登录/注册页面。 - 修改了
static/index.html,移除了认证表单,并添加了指向/login的链接。 - 修改了
static/app.js,调整了 Vue.js 逻辑,使其在index.html和login.html中都能正确工作,并添加了重定向逻辑。 - 修改了
app.py,添加了/login路由,用于返回static/login.html。 - 在
routes/auth.py中实现了/api/auth/send-reset-password-code和/api/auth/reset-password-with-code两个新接口。 - 在
core/models.py中定义了ResetPasswordWithCodeRequest模型。 - 修复了
routes/auth.py中重复的signup路由定义。 - 修改了
core/utils.py中的store_verification_code和verify_stored_code函数,使其支持prefix参数,解决了后端报错。
- 更新了
- 管理员功能:
- 实现了管理员图片上传功能(
/api/admin/upload-image)。 - 实现了管理员用户列表的查看、搜索、更新和删除功能(
/api/admin/users)。 - 前端
static/index.html中添加了v-if="isAdmin"控制的“后台管理”链接,并将其移动到“设置”和“关于”之间。 - 删除了
static/index.html中重复的“设置”链接和语言选项。
- 实现了管理员图片上传功能(
- 文档更新: 更新了
README.md,反映了项目的新功能、技术栈和正确的本地运行指南。 - Memory Bank 更新: 更新了所有核心 Memory Bank 文件以反映项目最新状态。
- Supabase 解决方案文件更新: 更新了
../solutions/supabase_solution.md。 .env文件生成: 生成了包含 Supabase 凭证占位符的.env文件。
剩余的工作
- Supabase 数据库设置: 在 Supabase 控制台中创建
airsltd项目,并设计sp_proxies表和sp_user_api_keys表(表名前缀为sp_)。 - 前端数据展示: 在
static/app.js中实现fetchProxies方法,使其能够调用后端/api/proxies端点并显示从 Supabase 获取的数据。 - 功能扩展: 根据实际需求,进一步开发前端界面和后端 API,实现更多功能。
- Supabase 认证配置: 在 Supabase 控制台中启用邮件认证,并根据需要配置其他认证提供商。
- 测试: 测试用户注册、登录、API Key 生成、代理数据获取、密码修改和忘记密码功能。
- 管理员用户设置: 确保管理员用户在 Supabase 数据库中的
is_admin字段设置为True,以便前端正确显示“后台管理”链接。
当前状态
项目已完成前后端一体框架的搭建,前端和后端的基本集成已完成,并实现了用户注册、登录、API Key 申请、获取用户电子邮件、修改密码、忘记密码以及管理员的用户和图片管理功能。认证逻辑已分离到独立的登录页面。项目现在可以在本地通过 conda 和 uvicorn 命令运行,并准备好与 Supabase 数据库进行实际的数据交互。
已知问题
static/app.js中的fetchProxies方法目前是注释掉的,需要手动启用并根据 Supabase 实际数据结构进行调整。- Supabase 数据库的
sp_proxies表和sp_user_api_keys表尚未创建,需要手动在 Supabase 控制台完成。 - 环境变量
SUPABASE_URL和SUPABASE_ANON_KEY需要在本地.env文件或部署环境中配置。 SUPABASE_SERVICE_ROLE_KEY需要在.env文件中配置,以便后端能够修改用户密码。- Supabase 的邮件认证可能需要额外配置,否则用户注册后需要手动确认邮件。