如何从websocket请求中找到用户?

时间:2019-04-17 13:11:21

标签: django django-channels

在django频道2.1.2中,我们可以通过以下方式获取经过身份验证的登录用户:

class ChatConsumer(AsyncConsumer):
     async def websocket_connect(self,event):
        logged_in_user = self.scope['user']

从channels.generic.websockets继承WebsocketConsumer时,如何查找已登录用户(如果使用频道1.1.8)

class ChatConsumer(WebsocketConsumer):
    def connect(self, message, **kwargs):
        logged_in_user = ?

1 个答案:

答案 0 :(得分:0)

在阅读了django频道文档后,我得到了答案。这是文档https://channels.readthedocs.io/en/1.x/generics.html#sessions-and-users

的链接

会话和用户

如果您希望对基于类的使用者使用channel_session或channel_session_user,只需在类主体中设置变量之一:

class MyConsumer(WebsocketConsumer):

    channel_session_user = True

这将在处理程序方法周围运行适当的装饰器,并在消息对象上提供message.channel_session和message.user-两者都作为参数传递给您的处理程序以及self.message,因为它们指向同一实例。

如果您只是想在django会话中使用该用户,请添加http_user:

class MyConsumer(WebsocketConsumer):

    http_user = True

这将为您提供message.user,它与request.user相同,位于常规视图上。

如果要在django会话中同时使用用户和会话,请添加http_user_and_session:

class MyConsumer(WebsocketConsumer):

    http_user_and_session = True

这将为您提供message.user和message.http_session。

因此在这种情况下,我们可以找到登录用户:

class ChatConsumer(WebscoketConsumer):
    http_user=True
    def connect(self, message, **kwargs):
        logged_in_user = message.user