【发布时间】:2022-05-12 18:17:18
【问题描述】:
我有一个现有的 Websocket 通道,需要通过他的 JWT 对用户进行身份验证,以便使用此套接字连接发送/接收消息。问题是 - 我不知道在建立连接时如何在消息正文中发送我的访问令牌。官方文档说:
"如果 url 包含用户信息,这将在建立连接时作为基本身份验证传递。"
但在我的情况下,JWT 是通过这样的消息传递的:
{"method":"auth","accessToken":"${MY_TOKEN}"}
我尝试通过在标头中传递 JWT 或在建立连接后使用 sink 进行连接,但是当我发送新消息时,它只调用 onDone 回调并关闭连接。
final _channel = IOWebSocketChannel.connect('${WEB_SOCKET_URL}');
...
void initState() {
_channel.stream.listen((message) {
print('message');
}, onError: (error, StackTrace stackTrace) {
print('error');
}, onDone: () {
print('done');
});
_channel.sink.add({
"method": "auth",
"accessToken": "${MY_TOKEN}"
});
}
我希望建立连接,然后我可以使用它来发送/接收消息,但它只会在我尝试使用“sink.add()”方法时关闭。
【问题讨论】: