Authentication 如何在Tornado中验证WebSocket

Authentication 如何在Tornado中验证WebSocket,authentication,websocket,tornado,Authentication,Websocket,Tornado,可以在Tornado中验证WebSocket握手请求吗?如果是,怎么做?如果没有,在打开WebSocket之前,我在哪里可以检查经过身份验证的用户?您的问题特别询问在打开WebSocket连接之前的身份验证 如果您愿意打开连接进行身份验证,然后在身份验证失败时关闭连接(仍然保证不发送任何数据),那么您需要在套接字处理程序的open方法中定义一个条件,该方法检查用户是否经过身份验证,并拒绝初始化数据流,否则(此处可能有兴趣),关闭连接。在初始握手时调用Open,但在方法返回之前不会发送数据。因此,

可以在Tornado中验证WebSocket握手请求吗?如果是,怎么做?如果没有,在打开WebSocket之前,我在哪里可以检查经过身份验证的用户

您的问题特别询问在打开WebSocket连接之前的身份验证

如果您愿意打开连接进行身份验证,然后在身份验证失败时关闭连接(仍然保证不发送任何数据),那么您需要在套接字处理程序的
open
方法中定义一个条件,该方法检查用户是否经过身份验证,并拒绝初始化数据流,否则(此处可能有兴趣),关闭连接。在初始握手时调用Open,但在方法返回之前不会发送数据。因此,可以在初始化侦听端点之前关闭连接

您可以使用以下选项检查已验证用户的请求:这在任何处理程序中都可用,包括
WebSocketHandler

您也可能正在使用–您可以通过使用
self.request.headers
,或使用
get\u secure\u cookie
访问套接字处理程序中的cookie

如果您选择使用cookie,则会出现如下情况:

class SocketHandler(tornado.websocket.WebSocketHandler):
def打开(自):
user\u slug=self.get\u secure\u cookie(“user\u cookie”)
如果用户_slug:
...
其他:
...
self.close()
...

如果由于某种原因,“代码>打开/代码>永远不被调用,您可以考虑从<代码> WebSocketHandler < /代码>中调用重写<代码>获取<代码>,以排除所有初始化:

class SocketHandler(tornado.websocket.WebSocketHandler):
def get(自身、*args、**kwargs):
如果self.get_current_user():
...
超级(SocketHandler,self).get(*args,**kwargs)
其他:
...

是的,最后一部分是正确的,应该可以做到这一点。之前的一切都是正确的,但都是多余的。