gpt4 book ai didi

authentication - 如何在 Tornado 中验证 WebSocket

转载 作者:行者123 更新时间:2023-12-02 21:13:57 24 4
gpt4 key购买 nike

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

最佳答案

您的问题具体询问了如何在打开 Websocket 连接之前进行身份验证。

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

您可以使用 RequestHandler.current_user 检查经过身份验证的用户的请求:这在任何处理程序中都可用,包括 WebSocketHandler

您可能还使用 authentication cookies – 您只需使用 self.request.headers 或使用 get_secure_cookie 即可在套接字处理程序中访问该 cookie。

如果您选择使用 cookie,您会得到这样的结果:

class SocketHandler(tornado.websocket.WebSocketHandler):

def open(self):
user_slug = self.get_secure_cookie("user_cookie")
if user_slug:
...
else:
...
self.close()
...

如果出于某种重要原因,从未调用 open,您可能会考虑从 WebSocketHandler 调用重写 get,以阻止所有初始化:

class SocketHandler(tornado.websocket.WebSocketHandler):

def get(self, *args, **kwargs):
if self.get_current_user():
...
super(SocketHandler, self).get(*args, **kwargs)
else:
...

关于authentication - 如何在 Tornado 中验证 WebSocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31835015/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com