Appearance
01 — 用户模块
负责用户身份认证与团队推荐关系的建立。采用区块链钱包签名(EIP-712)替代传统账号密码,确保身份的去中心化与安全性。
一、钱包登录(EIP-712 签名认证)
设计理念
用户无需注册账号,直接用加密钱包(如 MetaMask)签名完成身份验证。后端验签通过后颁发 JWT 令牌,后续所有接口凭此令牌访问。
登录流程
关键规则
| 规则 | 说明 |
|---|---|
| Nonce 有效期 | 5 分钟,超时须重新获取 |
| Nonce 一次性 | 使用后立即作废,防止重放攻击 |
| JWT 有效期 | 30 天,过期需重新登录 |
| 设备绑定 | JWT 与设备号(x-device-id)绑定,换设备需重新登录 |
| 多业务线 | 理财(invest)、量化(quantify)、Alphata 各自独立 Token,互不影响 |
理财模块登录特殊处理
理财(invest)登录时可携带推荐人信息:
paddr:推荐人钱包地址pjuid:推荐人节点 ID
若为新用户,系统自动完成推荐关系绑定(详见下文)。
二、登出
流程说明
- 接口:
index/off - 操作:清除服务器端 Redis 中的 Token 缓存,JWT 立即失效
- 若用户账号被封禁,系统也会自动触发登出,清除其 Token
三、推荐关系绑定
业务背景
平台采用多级推荐网络结构,用户(节点)之间形成上下级关系,下级质押产生的分润会沿关系链向上级分配。因此,推荐关系的正确建立至关重要。
绑定时机
也可通过独立接口 index/bind 主动发起绑定(需提交推荐人钱包地址和节点 ID)。
绑定校验规则
系统对推荐关系有严格校验,以下情况不允许绑定:
| 校验项 | 规则说明 |
|---|---|
| 自绑 | 不能绑定自己为上级 |
| 上级有效性 | 推荐人必须是平台已注册用户 |
| 节点匹配 | pjuid(节点 ID)必须与推荐人钱包地址一一对应 |
| 同钱包多节点 | 同一钱包下已有 2 个以上启用节点时,禁止绑定 |
| 环形关系检测 | 沿上级链向上追溯,若发现当前节点已存在于链中,则拒绝(防止形成环路) |
关系结构说明
- 每个用户在系统中对应一个或多个节点(JoinUser)
- 节点之间通过
pid(上级节点 ID)形成树形关系链 - 节点未绑定上级时,
pid = 0
四、接口汇总
| 接口 | 说明 | 是否需要登录 |
|---|---|---|
usr/nonce | 获取签名用的 Nonce | 否 |
usr/login | 钱包签名登录,获取 JWT | 否 |
usr/key | 生成关联用短期密钥 | 是 |
index/off | 登出,清除 Token | 是 |
index/bind | 主动绑定推荐人(仅理财模块) | 是 |
五、可变配置项
| 参数 | 当前值 | 影响 |
|---|---|---|
| JWT 有效期 | 30 天 | 用户登录持久性 |
| Nonce 有效期 | 5 分钟 | 登录操作时效 |
所属文件:backend/modules/quantify(invest/alphata)/v1/controllers/UsrController.php、backend/services/ftg/FtgAuthService.php