feat(client): 短信登录、JWT、Redis 与 Spug 短信及流式 Chat
- 新增客户端认证:短信发送/登录、access/refresh JWT、Guard/Strategy\n- Redis 存验证码;可配置 SMS_CODE_TTL_SECONDS;失败时回滚与明确错误\n- 短信改为 Spug 推送助手(code/targets/number/name),移除 UniSMS\n- Chat SSE 接口与 DTO;AppModule 挂载 RedisModule\n- 更新 README 与 project-solution 环境变量说明 Made-with: Cursor
This commit is contained in:
38
README.md
38
README.md
@@ -95,6 +95,18 @@ yarn install
|
||||
| `VOLC_API_KEY` | 火山引擎 API Key |
|
||||
| `VOLC_BASE_URL` | 可选,默认 `https://ark.cn-beijing.volces.com/api/v3` |
|
||||
|
||||
### Spug 推送助手(短信验证码)
|
||||
|
||||
在 [Spug 推送助手](https://push.spug.cc) 创建「短信验证码」类消息模板,复制模板编号(URL 路径中的 ID)。模板中可使用变量 **`number`**(有效期,单位:**分钟**);服务端会根据 `SMS_CODE_TTL_SECONDS` 换算后传入(向上取整,至少为 1),与 Redis 中验证码 TTL 一致。
|
||||
|
||||
| 变量 | 说明 |
|
||||
|------|------|
|
||||
| `SPUG_PUSH_SMS_TEMPLATE_ID` | 消息模板编号(必填,非 mock 时) |
|
||||
| `SPUG_PUSH_BASE_URL` | 可选,默认 `https://push.spug.cc` |
|
||||
| `SPUG_SMS_NAME` | 可选,模板若要求 `name` 变量则配置(与官方示例一致) |
|
||||
| `SMS_MOCK` | 可选,`true` 时跳过真实短信发送(本地联调用) |
|
||||
| `SMS_CODE_TTL_SECONDS` | 可选,短信验证码 Redis TTL(秒),默认 `300` |
|
||||
|
||||
> 说明:当前各 Provider 对上游采用 **非流式** `chat/completions` 调用,由网关将完整回复 **切片** 后以 SSE 推给客户端。后续可升级为上游真流式。
|
||||
|
||||
---
|
||||
@@ -135,6 +147,21 @@ yarn start
|
||||
|
||||
浏览器打开:`http://localhost:3000/docs`
|
||||
|
||||
### 客户端认证(MVP)
|
||||
|
||||
- `POST /api/client/v1/auth/sms/send`
|
||||
- 入参:`{ "phone": "13800000000", "scene": "login" }`
|
||||
- 返回:`requestId`、`expireIn`、`provider`
|
||||
- 说明:已接入 Spug 推送助手;非生产环境会额外返回 `testCode` 便于联调
|
||||
- `POST /api/client/v1/auth/sms/login`
|
||||
- 入参:`{ "phone": "13800000000", "code": "xxxxxx" }`
|
||||
- 返回:`accessToken`、`refreshToken`、`user`
|
||||
- `POST /api/client/v1/auth/refresh`
|
||||
- 入参:`{ "refreshToken": "..." }`
|
||||
- 返回:新的 `accessToken`、`refreshToken`
|
||||
|
||||
> 验证码当前已接入 Redis 存储(key: `chatone:client:sms:code:{phone}:{scene}`,TTL 300 秒)。
|
||||
|
||||
### 统一 SSE Chat(用户端)
|
||||
|
||||
- **路径**:`POST /api/client/v1/chat/completions/stream`
|
||||
@@ -168,8 +195,19 @@ yarn start
|
||||
|
||||
#### curl 示例(流式)
|
||||
|
||||
先获取 token:
|
||||
|
||||
```bash
|
||||
curl -s -H "Content-Type: application/json" -X POST \
|
||||
-d '{"phone":"13800000000","code":"123456"}' \
|
||||
http://localhost:3000/api/client/v1/auth/sms/login
|
||||
```
|
||||
|
||||
再带 `Authorization` 调用 chat:
|
||||
|
||||
```bash
|
||||
curl -N \
|
||||
-H "Authorization: Bearer 你的accessToken" \
|
||||
-H "Content-Type: application/json" \
|
||||
-X POST \
|
||||
-d '{"platform":"qwen","model":"qwen-plus","messages":[{"role":"user","content":"你是谁"}]}' \
|
||||
|
||||
Reference in New Issue
Block a user