Pterodactyl服务器WebSocket授权遇403错误求助
Pterodactyl WebSocket授权403错误解决
核心问题
你代码里的关键错误是:ws.send()方法不能直接传入JavaScript对象,必须先序列化为JSON字符串。当前你发送的是原始对象,服务器收到的是[object Object],完全无法解析出正确的授权信息,因此返回403权限错误。
修正后的代码
const { WebSocket } = require('ws'); const ws = new WebSocket(`wss://example.com:8080/api/servers/myServerUUID/ws`); ws.on(`open`, () => { // 将授权对象转为JSON字符串后发送 const authPayload = JSON.stringify({ event: "auth", args: [`mySuperSecretToken`] }); ws.send(authPayload); }); ws.on(`error`, (err) => { console.log(err); }); ws.on(`message`, data => { console.log(data.toString()); // 转为字符串更易查看返回内容 });
额外排查点
如果修正后仍出现403,检查以下内容:
- 确认
myServerUUID是服务器的正确UUID,而非面板用户的UUID - 确认
mySuperSecretToken是有效的Pterodactyl API令牌,且拥有对应服务器的操作权限 - 检查WebSocket地址的端口是否正确(默认8080,部分面板可能已修改)
- 确保服务器防火墙/安全组允许8080端口的WebSocket连接
官方文档说明
连接方式
连接至WebSocket地址(示例:"wss://pterodactyl.file.properties:8080/api/servers/1a7ce997-259b-452e-8b4e-cecc464142ca/ws")
向WebSocket发送如下格式的token:{"event":"auth","args":["eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImp0aSI6Ij..."]}
Token有效期约10-15分钟,当需要发送新token时,WebSocket会通过{"event":"token expiring"}和{"event":"token expired"}通知。
原错误信息
Error: Unexpected server response: 403 at ClientRequest.<anonymous> (C:\Users\RappyTV\Documents\Bot\node_modules\ws\lib\websocket.js:886:7) at ClientRequest.emit (node:events:527:28) at HTTPParser.parserOnIncomingClient (node:_http_client:631:27) at HTTPParser.parserOnHeadersComplete (node:_http_common:128:17) at TLSSocket.socketOnData (node:_http_client:494:22) at TLSSocket.emit (node:events:527:28) at addChunk (node:internal/streams/readable:324:12) at readableAddChunk (node:internal/streams/readable:297:9) at TLSSocket.Readable.push (node:internal/streams/readable:234:10) at TLSWrap.onStreamRead (node:internal/stream_base_commons:190:23)
内容的提问来源于stack exchange,提问作者RappyTV
相关产品推荐
相关产品推荐

