forked from datawhale/whale-town-front
fix: 修复聊天系统编译错误
- 修复 WebSocketManager/SocketIOClient 函数缩进错误 - 重命名 is_connected() 避免与 Object 基类冲突 - 修复 tscn 文件多余前导空格 - 修复测试文件 GUT 断言函数调用 - 添加 GUT 测试框架
This commit is contained in:
@@ -408,17 +408,36 @@ ChatManager="*res://_Core/managers/ChatManager.gd"
|
||||
|
||||
### 1. AuthManager 集成
|
||||
|
||||
**需求**: ChatManager 需要获取游戏 token
|
||||
**需求**: ChatManager 需要获取 access_token 用于 WebSocket 聊天认证
|
||||
|
||||
**解决方案**: 在 AuthManager 中添加方法
|
||||
**解决方案**: AuthManager 在登录成功后自动提取并保存 access_token 和 refresh_token
|
||||
|
||||
**Token 管理架构**:
|
||||
```gdscript
|
||||
# AuthManager.gd - 添加此方法
|
||||
func get_game_token() -> String:
|
||||
# 返回登录时保存的 token
|
||||
return _game_token if _game_token != null else ""
|
||||
# 内存存储(快速访问)
|
||||
var _access_token: String = "" # JWT访问令牌(短期,用于API和WebSocket)
|
||||
var _refresh_token: String = "" # JWT刷新令牌(长期,用于获取新access_token)
|
||||
var _user_info: Dictionary = {} # 用户信息
|
||||
var _token_expiry: float = 0.0 # access_token过期时间(Unix时间戳)
|
||||
|
||||
# 本地存储(ConfigFile持久化)
|
||||
const AUTH_CONFIG_PATH: String = "user://auth.cfg"
|
||||
```
|
||||
|
||||
**注意事项**: 需要在 `/auth/login` 成功后保存 token 到 AuthManager
|
||||
**登录流程**:
|
||||
1. 用户登录成功后,服务器返回 `access_token` 和 `refresh_token`
|
||||
2. AuthManager 调用 `_save_tokens_to_memory(data)` 保存到内存
|
||||
3. AuthManager 调用 `_save_tokens_to_local(data)` 保存到本地ConfigFile
|
||||
4. AuthScene 在登录成功后调用 `ChatManager.set_game_token(token)` 设置token
|
||||
|
||||
**Token 存储内容**:
|
||||
- **内存**: access_token, refresh_token, user_info, token_expiry
|
||||
- **本地 (user://auth.cfg)**: refresh_token, user_id, username, saved_at
|
||||
|
||||
**注意事项**:
|
||||
- `access_token` 仅保存在内存中,不存储到本地(安全考虑)
|
||||
- `refresh_token` 加密存储到本地,用于下次登录时自动刷新token
|
||||
- Token 过期后需要使用 refresh_token 刷新
|
||||
|
||||
### 2. EventSystem 集成
|
||||
|
||||
@@ -455,7 +474,8 @@ func _ready():
|
||||
#### 1. 登录
|
||||
```json
|
||||
// 发送
|
||||
{"type": "login", "token": "user_game_token"}
|
||||
// token 字段应该使用登录接口返回的 access_token
|
||||
{"type": "login", "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."}
|
||||
|
||||
// 成功响应
|
||||
{"t": "login_success", "sessionId": "...", "currentMap": "...", "username": "..."}
|
||||
@@ -464,6 +484,12 @@ func _ready():
|
||||
{"t": "error", "code": "AUTH_FAILED", "message": "..."}
|
||||
```
|
||||
|
||||
**Token 来源**:
|
||||
- 登录接口 (`/auth/login`) 返回 `access_token` (JWT访问令牌)
|
||||
- AuthManager 在登录成功后保存 access_token 到内存
|
||||
- AuthScene 在登录成功后设置 token 给 ChatManager
|
||||
- ChatManager 使用该 token 发送 WebSocket 登录消息
|
||||
|
||||
#### 2. 发送聊天
|
||||
```json
|
||||
// 发送
|
||||
|
||||
Reference in New Issue
Block a user