You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nativescript SocketIO v4配置extraHeaders丢失无法完成用户鉴权求助

解决方案

该问题是@triniwiz/nativescript-socketio v5.0.0底层Android端SocketIO Java客户端的已知行为:默认仅HTTP长轮询握手阶段会携带extraHeaders,如果直接使用WebSocket传输协议,自定义请求头会被丢弃。可按以下方案解决:

方案1:保留长轮询降级机制

优先使用HTTP长轮询完成握手,再升级到WebSocket协议,此时握手阶段携带的extraHeaders会被服务端正常识别,修改客户端配置即可:

SocketIOModule.forRoot('http://10.0.2.2:3000', {
  debug: true,
  log: true,
  // 必须先轮询再切WebSocket
  transports: ['polling', 'websocket'],
  extraHeaders: {
    'authorization': `Bearer ${getString('ACCESS_TOKEN')}`
  },
}),

方案2:使用SocketIO标准auth配置传递鉴权信息

如果需要强制使用纯WebSocket连接,建议改用SocketIO v4原生支持的auth配置项传递token,避免自定义头丢失问题:

客户端配置

SocketIOModule.forRoot('http://10.0.2.2:3000', {
  debug: true,
  log: true,
  transports: ['websocket'],
  auth: {
    token: getString('ACCESS_TOKEN')
  }
}),

服务端鉴权逻辑调整

io.use((socket, next) => {
  const token = socket.handshake.auth?.token;
  if (!token) return next(new Error('Authorization failed'));
  // 执行token校验逻辑
  next();
});

其他补充说明

Chrome DevTools无法捕获Nativescript Android端的WebSocket请求是正常现象,若需要抓包验证,可以给安卓模拟器设置全局代理,用Charles、Fiddler等工具捕获完整请求。
如果上述方案都不满足需求,可以升级@triniwiz/nativescript-socketio到v6.0.0及以上版本,该版本已经修复了Android端WebSocket自定义头丢失的问题。

内容的提问来源于stack exchange,提问作者Shidomaru NeveRage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 15:36:04