旧 forward 用 target.favorability == 10 判断"未迁移",10 既是初始值也是衰减 常见值,重跑会覆盖合法数据;backward 用 != 10 反向判断会丢衰减回 10 的数据。 改用 AffinityLog source='data_migration' 标记做幂等: - forward 写入新值时同步写一条 audit log,metadata 含原 ParadiseUser 值 - backward 遍历 audit log 反向恢复并删除标记,保证 forward/backward 可循环 同步:AffinityLog.SOURCE_CHOICES 追加 'data_migration' + 0008 AlterField 迁移 更新 Python 端 choices 校验。 option B 选择:直接重写 0006(dev 已跑过但 migrate_count=0 等于未动数据, django_migrations 表已记录完成不会再跑)。生产部署前需确认 prod 未跑过 0006, 否则需 fake-reverse 流程,详见迁移文件 docstring 与 FIX-REPORT。 详见 docs/REVIEW-affinity-P1.md CR-003。
用户管理模块 (userapp)
概述
用户管理模块提供了完整的用户账号管理功能,包括:
- 多种方式的用户注册(用户名注册)
- 多种方式的用户登录(用户名登录、邮箱登录、手机验证码登录)
- 用户信息管理
- 密码重置
- 第三方账号登录(通过 allauth 支持)
API 文档
详细的API文档请参考:
- 用户认证API文档 - 包含所有认证相关接口
- Swagger API文档:运行服务后访问
/swagger/路径
认证方式
系统支持两种认证方式:
- Token认证:基于自定义的Redis存储Token,用于API访问
- Session认证:基于Django内置的session机制,主要用于管理后台
目录结构
userapp/
├── models.py # 用户模型定义
├── views.py # API视图
├── serializers.py # 序列化器
├── urls.py # URL路由配置
├── utils.py # 工具函数
└── authentication.py # 自定义认证类
登录注册流程
注册流程
- 用户名注册:
- 访问
/api/user/auth/register/ - 提供用户名、密码、确认密码
- 可选提供邮箱和手机号
- 访问
登录流程
系统支持多种登录方式:
-
用户名登录:
- 访问
/api/user/auth/username/login/ - 提供用户名和密码
- 获取返回的令牌Token
- 访问
-
邮箱登录:
- 访问
/api/user/auth/email/login/ - 提供邮箱和密码
- 获取返回的令牌Token
- 访问
-
手机验证码登录:
- 先访问
/api/user/auth/phone/verify/获取验证码 - 然后访问
/api/user/auth/phone/login/提供手机号和验证码 - 获取返回的令牌Token
- 先访问
使用令牌
获取令牌后,在后续请求中添加以下请求头:
Authorization: Bearer {token}