rwadurian/backend/services/identity-service
hailin b4c4239593 feat: 实现手机号+密码登录和账号恢复功能
## 后端更改

### 新增功能
- 添加手机号+密码登录 API (`POST /user/login-with-password`)
  - 新增 LoginWithPasswordDto 验证手机号格式和密码长度
  - 实现 loginWithPassword 服务方法,使用 bcrypt 验证密码
  - 返回 JWT tokens(accessToken + refreshToken)

### 代码优化
- 修复 phone.validator.ts 中的 TypeScript 类型错误(Object -> object)

## 前端更改

### 新增功能
- 实现手机号+密码登录页面 (phone_login_page.dart)
  - 完整的表单验证(手机号格式、密码长度)
  - 集成 AccountService.loginWithPassword API
  - 登录成功后自动更新认证状态并跳转主页

### 账号服务优化
- 在 AccountService 中添加 loginWithPassword 方法
  - 调用后端 login-with-password API
  - 自动保存认证数据(tokens、用户信息)
  - 使用 _savePhoneAuthData 统一保存逻辑

### UI 文案更新
- 向导页文案修改:"创建账号" → "注册账号"
  - 更新标题、副标题和按钮文本
  - 添加"恢复账号"按钮,跳转到手机号密码登录页

## 已验证功能

 前端代码编译通过(0 errors, 仅有非关键警告)
 后端代码编译通过(0 errors, 仅有非关键警告)
 30天登录状态保持(JWT refresh token 已配置为30天)
 自动路由逻辑(有登录状态直接进入主页)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-20 20:35:44 -08:00
..
.claude feat(identity): store complete deviceInfo JSON from frontend 2025-12-07 11:08:37 -08:00
database refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
docs refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
prisma fix(identity-service): 设置 user_id 自增序列从 10 开始 2025-12-20 18:16:08 -08:00
scripts refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
src feat: 实现手机号+密码登录和账号恢复功能 2025-12-20 20:35:44 -08:00
test feat: 实现手机号+密码登录和账号恢复功能 2025-12-20 20:35:44 -08:00
.dockerignore refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
.env.development refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
.env.example feat(auth): 增强提现安全验证 2025-12-19 03:05:53 -08:00
.env.production refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
.env.test refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
.eslintrc.js refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
.gitignore refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
.prettierrc refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
Dockerfile fix(identity-service): 添加 CA 证书以支持 HTTPS 连接 2025-12-20 18:30:04 -08:00
Identity_Service_Context_dir_Architecture.png first commit 2025-11-23 21:21:44 -08:00
README.md refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
deploy.sh . 2025-12-07 00:40:19 -08:00
docker-compose.yml refactor: unify docker-compose configs to use shared infrastructure 2025-12-07 00:35:56 -08:00
nest-cli.json refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
package-lock.json feat(identity-service): 添加密码设置和短信验证功能 2025-12-19 03:23:36 -08:00
package.json feat(identity-service): 添加密码设置和短信验证功能 2025-12-19 03:23:36 -08:00
tsconfig.build.json refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
tsconfig.json refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00

README.md

Identity Service

RWA用户身份上下文微服务 - 基于DDD架构的NestJS实现

技术栈

  • 框架: NestJS + TypeScript
  • ORM: Prisma
  • 消息队列: Kafka
  • 缓存: Redis (ioredis)
  • 区块链: ethers.js + @scure/bip32 + bech32

项目结构

src/
├── api/                    # 表现层
│   ├── controllers/        # 控制器
│   └── dto/               # 请求/响应DTO
├── application/           # 应用层
│   ├── commands/          # 命令对象
│   └── services/          # 应用服务
├── domain/                # 领域层
│   ├── aggregates/        # 聚合根
│   ├── entities/          # 实体
│   ├── events/            # 领域事件
│   ├── repositories/      # 仓储接口
│   ├── services/          # 领域服务
│   └── value-objects/     # 值对象
├── infrastructure/        # 基础设施层
│   ├── persistence/       # 持久化
│   ├── redis/            # Redis服务
│   ├── kafka/            # Kafka事件发布
│   └── external/         # 外部服务
├── shared/               # 共享层
│   ├── decorators/       # 装饰器
│   ├── guards/           # 守卫
│   ├── filters/          # 过滤器
│   └── exceptions/       # 异常类
└── config/               # 配置

核心功能

  • 用户账户自动创建(首次打开APP)
  • 多设备管理与授权(最多5个设备)
  • 三链钱包地址生成(KAVA/DST/BSC)
  • 助记词生成与加密存储
  • 序列号+助记词恢复账户
  • 序列号+手机号恢复账户
  • KYC实名认证
  • 推荐码生成与验证
  • Token自动刷新机制

快速开始

1. 安装依赖

npm install

2. 配置环境变量

cp .env.example .env
# 编辑 .env 文件配置数据库等信息

3. 初始化数据库

npm run prisma:generate
npm run prisma:migrate

4. 启动服务

# 开发模式
npm run start:dev

# 生产模式
npm run build
npm run start:prod

5. Docker部署

docker-compose up -d

API文档

启动服务后访问: http://localhost:3000/api/docs

主要API

方法 路径 说明
POST /user/auto-create 自动创建账户
POST /user/recover-by-mnemonic 助记词恢复
POST /user/recover-by-phone 手机号恢复
POST /user/auto-login 自动登录
GET /user/my-profile 我的资料
GET /user/my-devices 我的设备
POST /user/bind-phone 绑定手机号
POST /user/submit-kyc 提交KYC

领域不变式

  1. 手机号在系统内唯一(可为空)
  2. 账户序列号全局唯一且递增
  3. 每个账户最多5个设备同时登录
  4. KYC认证通过后身份信息不可修改
  5. 每个区块链地址只能绑定一个账户
  6. 推荐人序列号一旦设置终生不可修改
  7. 助记词必须加密存储,只在创建时返回一次
  8. 三条链的钱包地址必须从同一个助记词派生

License

Proprietary