socket.io-client io.connect查询字符串与OAuth access_token

时间:2016-02-17 11:23:07

标签: node.js oauth websocket socket.io

关于这个问题,我在过去几天搜索了堆栈溢出和谷歌。

我正在尝试连接到第三方API,因此无法访问或查看websocket服务器。

我能够连接到OAuth端点并返回有效的Access令牌但是我无法通过socket.io-clients io.connect 方法传递此访问令牌,而访问令牌不是urlencoded

我用来访问端点的代码(已过期但有效的访问令牌)

 serviceEndpoint = "/uapi/ws/" + sha1(appId + accessToken) + "/" + instanceId + "/";


    socket = io.connect(host, {
        transports: ['websocket'],
        path: serviceEndpoint,
        query: "access_token=1|5-zURhzg6X-vEWUwqBM~b9D0vqHJ-bBR|211|1455710158|7-ykMSvs07-w13mfhpf.CBNJEmmH.GY5"
    });

当从服务器(401)收回错误时,正在请求的网址具有 access_token 的以下字符串:

access_token=1%7C5-zURhzg6X-vEWUwqBM~b9D0vqHJ-bBR%7C211%7C1455710158%7C7-ykMSvs07-w13mfhpf.CBNJEmmH.GY5

正如您所看到的,所有管道(|)字符都已被编码,导致服务器丢弃该令牌。

  • 有没有办法阻止查询字符串被urlencoded?
  • 如果没有,有没有办法使用socket.io-client?
  • POST这个参数

1 个答案:

答案 0 :(得分:0)

因此,在经过更多研究并查看其他方法以及与API提供商的讨论后,我发现的一个解决方法是在连接上设置标题。

This Stack Overflow Answer绝对有帮助。请注意,socket.io-client的版本需要为> = 1.4才能使其正常工作