我正在尝试使用此解决方案来验证 WebSocket 连接 (
server.on('upgrade',...
):
https://www.npmjs.com/package/ws#user-content-client-authentication
但我需要使用异步函数来根据外部身份验证服务检查令牌。我遇到的情况是,在身份验证之前,会触发
ws.on('message',...
事件并将消息发送到浏览器。
有谁知道如何解决这个问题吗?
export function initWebSocketServer( server: http.Server ) {
wss = new WebSocket.Server({ server: server });
wss.on('connection', connectWebSocket);
server.on('upgrade', async function upgrade(request, socket, head) {
socket.on('error', onSocketError);
let res = await authenticateWebSocket(request);
if (res === false) {
logger.info('authenticateWebSocket > 401 Unauthorized');
socket.write('HTTP/1.1 401 Unauthorized\r\n\r\n');
socket.destroy();
return;
}
socket.removeListener('error', onSocketError);
wss.handleUpgrade(request, socket, head, function done(ws) {
wss.emit('connection', ws, request);
});
});
}
function connectWebSocket(ws: WebSocket) {
...
ws.on('message', (message: string) => {
messageReceiveWebSocket( message, ws )
});
...
}