gpt4 book ai didi

python - 如何强制 Tornado websockets 在握手时生成错误页面

转载 作者:太空宇宙 更新时间:2023-11-04 10:51:49 25 4
gpt4 key购买 nike

我正在编写一个使用 Tornado websockets 的小应用程序。我使用 cookie 进行身份验证,因此我想在建立网络套接字时检查它。

所以这是挑战(建立在官方的 websockets 示例上):

class EchoWebSocket(tornado.websocket.WebSocketHandler):
def open(self):
userx = self.get_secure_cookie("user")
if not userx:
self.send_error(403) #I want to redirect or otherwise stop the user
print "WebSocket opened"

def on_message(self, message):
userx = self.get_secure_cookie("user")
self.write_message(u"%s said: %s" % (userx, message))

def on_close(self):
print "WebSocket closed"

原来这在Tornado中不是很流行,抛出这个错误:

ERROR:root:Exception in callback <tornado.stack_context._StackContextWrapper object at    0x10fa10db8>
Traceback (most recent call last):
....
File "/Library/Python/2.7/site-packages/tornado-2.4-py2.7.egg/tornado/iostream.py", line 565, in _check_closed
raise IOError("Stream is closed")
IOError: Stream is closed

是否有可能在 websockets 握手期间“验证或取消”?这是我的代码有问题,还是 Tornado 有问题/缺少功能?在这种情况下,Tornado 是否能够通过 websockets 发送一些错误条件以触发客户端的 onerror 处理程序(在手册中找不到任何强制错误条件的方法)?

我要实现的事件顺序是:

  1. 用户使用常规网络请求登录, session token 存储为安全 cookie

  2. 用户加载一个使用 websockets 的页面,javascript 尝试建立套接字

  3. 在建立套接字之前,我想检查是否存在有效的 session token

    • 如果 token 有效,则套接字已建立并且我的应用程序按预期工作
    • 如果 token 无效,则没有套接字,用户收到错误(或者,服务器引发 websocket 错误条件)

最佳答案

您可以跟踪您的用户,您可以很容易地做到这一点,因为每个连接到服务器的用户都会创建一个实例,检查这个 SO link .

关于如果他未通过身份验证你想关闭连接,你可以通过调用 WebSWebSocketHandler 实例中的 close() 方法来实现,如下所示:

class WSHandler(tornado.websocket.WebSocketHandler):

def open(self):
if not condition:
self.close()

在 Tornado 中检查:tornado.websocket.WebSocketHandler.WebSocketHandler.close()

我没有亲自尝试过。您可以尝试一下,然后告诉我它是否适合您。

关于python - 如何强制 Tornado websockets 在握手时生成错误页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13351844/

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