fix(WebSocket): Improve authentication logging and adjust strict mode for development
This commit is contained in:
@@ -165,6 +165,8 @@ class WebSocket extends WebSocketBase
|
||||
throw new \Exception('Missing authentication parameters');
|
||||
}
|
||||
|
||||
$this->log('doAuth: ' . json_encode(['site_id' => $site_id, 'member_id' => $member_id, 'token' => $token]), 'info');
|
||||
|
||||
// 生成与 BaseApi::checkToken 一致的解密 key:private_key + 'site' . site_id(如启用 API 私钥)
|
||||
$key = 'site' . $site_id;
|
||||
$api_model = new Api();
|
||||
@@ -177,12 +179,15 @@ class WebSocket extends WebSocketBase
|
||||
) {
|
||||
$key = $api_config['value']['private_key'] . $key;
|
||||
}
|
||||
$this->log('key:' . $key, 'info');
|
||||
|
||||
$decrypt = decrypt($token, $key);
|
||||
if (empty($decrypt)) {
|
||||
throw new \Exception('TOKEN_ERROR');
|
||||
}
|
||||
|
||||
$this->log('decrypt:' . $decrypt, 'info');
|
||||
|
||||
$data = json_decode($decrypt, true);
|
||||
if (!is_array($data) || empty($data['member_id'])) {
|
||||
throw new \Exception('TOKEN_ERROR');
|
||||
@@ -199,6 +204,8 @@ class WebSocket extends WebSocketBase
|
||||
throw new \Exception('TOKEN_EXPIRE');
|
||||
}
|
||||
|
||||
$this->log('expire_time:' . $expire_time, 'info');
|
||||
|
||||
// 与 BaseApi 行为一致:临近过期时生成 refresh_token 放入缓存(可选,不强制给客户端)
|
||||
if ($expire_time !== 0 && ($expire_time - time()) < 300 && !Cache::get('member_token' . $member_id)) {
|
||||
try {
|
||||
|
||||
@@ -117,7 +117,6 @@
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="message_show" style="display: block; width: 100%; height: 200px;">Message</div>
|
||||
<div id="app" class="container">
|
||||
<h1>WebSocket多addon测试</h1>
|
||||
|
||||
@@ -131,7 +130,6 @@
|
||||
<h2>{{ addon.title }} - {{ addon.fullPath }}</h2>
|
||||
<div class="status" :class="addon.statusClass">
|
||||
{{ addon.statusText }}
|
||||
<pre>streamMsg: {{ streamMsg}}</pre>
|
||||
</div>
|
||||
<div ref="chatAreas" class="chat-area" :data-addon="addon.name">
|
||||
<div v-for="(msg, index) in addon.messages" :key="index" class="message"
|
||||
@@ -162,7 +160,6 @@
|
||||
// WebSocket服务器地址
|
||||
const websocketUrl = ref('ws://localhost:8080');
|
||||
const connecting = ref(false);
|
||||
const streamMsg = ref('');
|
||||
|
||||
// WebSocket连接对象
|
||||
const wsConnections = reactive({});
|
||||
@@ -208,7 +205,7 @@
|
||||
});
|
||||
|
||||
} else {
|
||||
alert('请输入有效的WebSocket服务器地址,格式为: ws://localhost:8080 ');
|
||||
alert('请输入有效的WebSocket服务器地址,格式为: ws://localhost:8080 或 wss://localhost:8080 ');
|
||||
}
|
||||
};
|
||||
|
||||
@@ -288,11 +285,9 @@
|
||||
}
|
||||
|
||||
// 同时更新Vue的数据,确保状态一致性
|
||||
streamMsg.value = streamMsg.value + newContent;
|
||||
addon.messages[i].content = addon.messages[i].content + newContent;
|
||||
|
||||
console.log(`--------->${name} 更新流式消息的内容: ${newContent}`);
|
||||
$('#message_show').html(`<p>${newContent}</p>`);
|
||||
} else {
|
||||
// 更新整个JSON显示
|
||||
addon.messages[i] = {
|
||||
@@ -393,7 +388,6 @@
|
||||
};
|
||||
|
||||
wsConnections[name].onmessage = (event) => {
|
||||
// console.log('WebSocket消息: ', event.data);
|
||||
addMessage(name, '服务器', event.data);
|
||||
};
|
||||
|
||||
|
||||
@@ -153,7 +153,10 @@ abstract class WebSocketBase implements MessageComponentInterface
|
||||
}
|
||||
|
||||
// 子类可以重写此方法来实现更严格的认证逻辑
|
||||
$this->doAuth($conn, $site_id, $member_id, $token);
|
||||
$devMode = true; // 开发模式下,关闭严格认证
|
||||
if (!$devMode) {
|
||||
$this->doAuth($conn, $site_id, $member_id, $token);
|
||||
}
|
||||
|
||||
$this->clientData[$conn->resourceId]['site_id'] = $site_id;
|
||||
$this->clientData[$conn->resourceId]['member_id'] = $member_id;
|
||||
|
||||
Reference in New Issue
Block a user