公网 /account/ 下绝对路径 /api/admin 会被 OpenIM 接走,无条件 res.json() 把非 JSON 响应打成英文异常。按页面路径拼接前缀,并先看状态再解析。 Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: multica-agent <github@multica.ai>
66 lines
3.0 KiB
Markdown
66 lines
3.0 KiB
Markdown
# 公司账号服务(account-service)
|
||
|
||
内部通讯 app 的自研登录体系:替代 OpenIM 样板的注册登录(open-im-chat,GPLv3,不用)。
|
||
|
||
- 员工账号只能由管理员开通:批量导入 / 单个添加 / 停用 / 启用 / 重置密码
|
||
- 员工用 **工号 + 密码** 登录;校验通过后,本服务向 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)。
|
||
|
||
成功:
|
||
|
||
```json
|
||
{ "code": 0, "msg": "", "data": { "userID": "10001", "nickname": "张三", "imToken": "<openim token>", "expireTimeSeconds": 7776000 } }
|
||
```
|
||
|
||
客户端拿到后用 `userID + imToken` 走 OpenIM SDK 登录;OpenIM 的 API 地址为 `http://<服务器IP>:10002`,WebSocket 为 `ws://<服务器IP>:10001`。
|
||
|
||
失败:`code != 0`,`msg` 为大白话原因(工号或密码错误 / 账号已停用,请联系管理员)。
|
||
|
||
### 管理接口(请求头带 `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/`(公网反代场景为 `https://<域名>/account/`),输入管理口令即可操作,无需写接口。页面会按当前地址自动带上部署前缀请求 `/api/admin/...`,不要改成以 `/` 开头的绝对路径,否则公网会被 OpenIM 根路由接走。
|
||
|
||
## 部署
|
||
|
||
已并入根目录 `docker-compose.yaml`(服务名 `account-server`),随整套环境一起起:
|
||
|
||
```bash
|
||
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`,重建容器不丢。
|
||
|
||
管理页热修自测(不连现网、不读真实员工数据):
|
||
|
||
```bash
|
||
node account-service/test-admin-page.js
|
||
```
|