我能够在自己的环境中解决这个问题。我使用这个片段,但在解决根问题之前我遇到了问题。
io.set('authorization', socketioJwt.authorize({ secret: jwtSecret, handshake: true }));
根本问题是 token 需要 的 socketio,智威汤逊 强> 没有被添加到请求中 query 。如果你检查 的 socketio-JWT / LIB / index.js 强> ,你会看到一些代码,如:
token
query
//get the token from query string if (req._query && req._query.token) { token = req._query.token; } else if (req.query && req.query.token) { token = req.query.token; }
这意味着您应该能够记录值 query 和 _query 在这里,看看你的令牌。
_query
如果不能,则必须确保在socket.io客户端中将令牌设置为查询。典型的方法是将其添加到 connectParams 。
connectParams
在iOS / Swift客户端中,这看起来像这样:
self.socket = [[SocketIOClient alloc] initWithSocketURL:@"localhost:8091" options:@{ @"connectParams" : @{@"token" : <my_token>} }];
其实正确的语法:
var ioSocket = io(null, { query: { token: Auth.getToken() } });