使用shelf_auth和shelf_web_socket验证在DART WebSocket连接(A

2019-10-23 04:48发布

使用shelf_auth我可以提取要求这样当前用户的信息:

getAuthenticatedContext(request)
  .map((ac) => ac.principal.name)
  .getOrElse(() => 'guest')

但是,很显然,我需要一个请求该工作:)在另一方面,使用shelf_web_socket,建立WebSocket连接的执行处理这样的:

handleWS(CompatibleWebSocket ws){
  // Here I should get user from getAuthenticatedContext()
  // but I cannot due to absence of Request here.
  ws.messages.listen(...);
};

rootRouter.get('/ws', webSocketHandler(handleWS), middleWare: authMiddleware);

但我不知道如何原始套接字连接请求转发到我的handleWS,才能够知道哪些用户只需连接到服务器。


另一个问题是什么是存储这些开放的插座,以能够广播消息发送给所有连接的客户端,并删除相应的插座在关闭时的最佳实践。 第一件事就是来我的心是存储插槽像一个地图Map<int,CompatibleWebSocket>其中int是CompatibleWebSocket.hash()

然后,我可以遍历Map.values()做广播,而当连接被关闭的键删除。

我不能说是否过于复杂的技术,这样的任务,可能存在更便捷的方式这样做,就像它们存储在一个列表? 或者,我可以加入流莫名其妙的广播?

文章来源: Authenticate websocket connection in Dart using shelf_auth and shelf_web_socket