Files
tongxunruanjian/account-service
编码工程师andmultica-agent 12b0a1c943 feat(mobile,account-service): 统一发送服务 + 员工目录接口 + 好友申请五态/验证消息(B-52 施工 2/3)
- message_send_service:所有消息走统一门禁(登录/连接/空接收方/好友校验),
  失败打印 SDK 原始 code 并映射中文提示,不再只吞异常
- chat_screen 接入统一发送服务,失败提示真实原因
- account-service 新增 GET /api/directory(登录用户可读启用员工,用于添加同事)
- add_friend_screen 增加可编辑验证消息(视觉规范 4.2)
- new_friends_screen 五态 + 窄屏(<360)按钮组换行不挤压姓名(视觉规范 5.3)

Co-authored-by: multica-agent <github@multica.ai>
2026-08-16 02:16:00 +08:00
..

公司账号服务(account-service

内部通讯 app 的自研登录体系:替代 OpenIM 样板的注册登录(open-im-chatGPLv3,不用)。

  • 员工账号只能由管理员开通:批量导入 / 单个添加 / 停用 / 启用 / 重置密码
  • 员工用 工号 + 密码 登录;校验通过后,本服务向 OpenIM 换取 IM token 返回客户端
  • 员工数据存在本地 JSON 文件(容器内 /app/data/employees.json,已挂卷),密码 scrypt 加盐哈希,不落明文
  • 停用 = 本服务拒绝登录 + 调 OpenIM force_logout 踢掉各端在线连接
  • 零 npm 依赖,Node 20 单文件服务

接口约定(供手机端 / PC 端对接)

员工登录(客户端调用)

POST /api/login
{ "staffNo": "10001", "password": "xxx", "platformID": 2 }

platformID 按端传:1 iOS、2 Android、3 Windows、4 macOS、5/10 Web(不传默认 10)。

成功:

{ "code": 0, "msg": "", "data": { "userID": "10001", "nickname": "张三", "imToken": "<openim token>", "expireTimeSeconds": 7776000 } }

客户端拿到后用 userID + imToken 走 OpenIM SDK 登录;OpenIM 的 API 地址为 http://<服务器IP>:10002WebSocket 为 ws://<服务器IP>:10001

失败:code != 0msg 为大白话原因(工号或密码错误 / 账号已停用,请联系管理员)。

管理接口(请求头带 admin-token: <ACCOUNT_ADMIN_TOKEN>

方法 路径 说明
GET /api/admin/employees 员工列表
POST /api/admin/employees 添加 {staffNo, name, password}
POST /api/admin/import 批量导入 {csv},每行 工号,姓名,初始密码(Tab 分隔也行,Excel 直接粘)
POST /api/admin/disable 停用 {staffNo},立即无法登录并被踢下线
POST /api/admin/enable 启用 {staffNo}
POST /api/admin/reset_password 重置密码 {staffNo, password}
POST /api/admin/delete 删除 {staffNo},立即无法登录并被踢下线(OpenIM 侧同名用户保留但本服务不再为其签发令牌,等于不可用)

管理页:浏览器打开 http://<服务器IP>:10010/,输入管理口令即可操作,无需写接口。

部署

已并入根目录 docker-compose.yaml(服务名 account-server),随整套环境一起起:

docker compose up -d --build account-server

相关环境变量(见 .env.example):

  • ACCOUNT_PORT:宿主端口,默认 10010
  • ACCOUNT_ADMIN_TOKEN:管理口令,部署时务必改掉默认值

重启/升级:改代码后 docker compose up -d --build account-server;数据在 ./data/account/employees.json,重建容器不丢。