yda*_*niv 2 authentication tornado websocket
是否可以在 Tornado 中验证 WebSocket 握手请求?如果是这样,如何?如果没有,在打开 WebSocket之前,我可以在哪里检查经过身份验证的用户?
您的问题专门询问在打开 websocket 连接之前进行身份验证。
如果您愿意允许打开连接进行身份验证,然后在身份验证失败时关闭(仍然保证不发送数据),那么您需要在open套接字处理程序的方法中定义一个条件,即用户的检查已通过身份验证,否则拒绝初始化数据流(此处可能对 WebSocketHandler 源感兴趣),从而关闭连接。在初始握手时调用 Open,但在方法返回之前不会发送任何数据。因此,您可以在初始化侦听端点之前关闭连接。
您可以使用以下命令检查对经过身份验证的用户的请求RequestHandler.current_user:这在任何处理程序中都可用,WebSocketHandler包括在内。
您可能还使用了身份验证 cookie——您可以简单地通过使用self.request.headers或来访问您的套接字处理程序中的该 cookie get_secure_cookie。
如果您选择使用 cookie,您会遇到这样的情况:
class SocketHandler(tornado.websocket.WebSocketHandler):
def open(self):
user_slug = self.get_secure_cookie("user_cookie")
if user_slug:
...
else:
...
self.close()
...
Run Code Online (Sandbox Code Playgroud)
如果出于某种原因open从未调用过重要的,您可以考虑调用覆盖getfrom WebSocketHandler,以排除所有初始化:
class SocketHandler(tornado.websocket.WebSocketHandler):
def get(self, *args, **kwargs):
if self.get_current_user():
...
super(SocketHandler, self).get(*args, **kwargs)
else:
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1203 次 |
| 最近记录: |