Django websockets身份验证

时间:2019-01-02 09:49:32

标签: django tornado sockjs

我将tornado + sockjs用于websocket,将Django rest框架用于主要应用。 我也使用rest-framework-jwt在Django应用程序上进行身份验证。 现在,我必须确定龙卷风中的用户。我怎么看:

  1. 当sockjs连接到龙卷风服务器时,用户在消息中发送jwt。
  2. 龙卷风服务器解析jwt并确定是否有效的jwt?但是对于这种解决方案,我必须读取数据库。但是此操作是同步的,所以效果不好,因为龙卷风是异步的。

我也想用芹菜。当用户连接到龙卷风时,龙卷风为芹菜创建任务,并且在此任务中将解析jwt。在这种情况下,解决方案不会阻止龙卷风。但是然后如何通过websocket通知用户有关check jwt的信息呢?

2 个答案:

答案 0 :(得分:1)

如果要使用SQLAlchemy连接并处理数据库,则可以使用tornado-sqlalchemy在数据库上进行异步查询,并通过WebSocket通知用户,而不会中断龙卷风的事件循环。

@coroutine
def open(self):
   with self.make_session() as session:
       jtw = request.params.get('authorization')
       jwt_valid = yield self.check_jwt_valid(jwt, session)
       if not jwt_valid:
          self.write('JWT Inválid')
          self.close()      

@coroutine 
def check_jwt_valid(self, jwt, session):
   jwt_found = session.query(JWT_QUERY...).first()
   return jwt_found

答案 1 :(得分:1)

这就是我要做的:

Share JWT beetween Django and Tornado

Redis快速,轻便,您可以从Tornado异步连接它。

这里不需要芹菜。