是否可以在Tornado中验证WebSocket握手请求?如果是这样,怎么样?如果没有,我在哪里可以检查经过身份验证的用户之前打开WebSocket?
答案 0 :(得分:2)
您的问题专门询问在打开websocket连接之前验证。
如果您愿意允许打开连接以进行身份验证,那么在身份验证失败时仍会关闭(仍然保证不会发送任何数据),那么您需要在{{1}中定义一个条件您的套接字处理程序的方法,检查用户是否经过身份验证,并拒绝初始化数据流,否则(the WebSocketHandler source可能会感兴趣),关闭连接。在初始握手时调用Open,但在方法返回之前不会发送任何数据。因此,您可以在初始化侦听端点之前关闭连接。
您可以使用RequestHandler.current_user
检查经过身份验证的用户的请求:这可以在任何处理程序中使用,包括open
。
您可能也在使用authentication cookies - 只需使用WebSocketHandler
或self.request.headers
即可访问套接字处理程序中的Cookie。
如果你选择使用cookie,你会有这样的事情:
get_secure_cookie
如果由于某种原因重要的是永远不会调用class SocketHandler(tornado.websocket.WebSocketHandler):
def open(self):
user_slug = self.get_secure_cookie("user_cookie")
if user_slug:
...
else:
...
self.close()
...
,您可以考虑从open
调用覆盖get
,以排除所有初始化:
WebSocketHandler