Tornado WebSocket应用中的用户认证
现在,我在提升我的Tornado技能,有一个关于用户认证的问题。
我的解决方案是在首页创建一个安全的令牌,然后将这个令牌和其他数据一起从JavaScript发送到Tornado服务器,在那里进行检查和用户认证。
我考虑过使用cookie,但我不知道如何在 WebSocketHandler.on_message
中读取cookie。
你觉得怎么样?我哪里做错了?谢谢!
2 个回答
6
一个客户端可能会用一个假的用户信息来构造请求头,内容大概是这样的:'user="ImFkbWxxxx==|xxxxxxxxxx|9d847f58a6897df8912f011f0a784xxxxxxxxxx"'。
我觉得下面这种方法更好。如果用户不存在,或者cookie的ID不正确或者被篡改了,那么函数get_secure_cookie就不会返回任何用户信息。
class WebSocketHandler(tornado.websocket.WebSocketHandler):
def open(self):
user_id = self.get_secure_cookie("user")
if not user_id: return None
...
11
我建议你看看文档中的概述部分。
那里应该有一些相关的内容:
编辑
我刚意识到你的问题是关于websockets的。我认为你可以按照你提到的方法来做:
- 在应用的非websocket部分创建一个cookie
- 在websocket处理程序中检查这个cookie
你应该能够在websocket处理程序中通过 self.request.headers
来访问请求头。