【问题标题】:How to find user from websocket request?如何从 websocket 请求中找到用户?
【发布时间】:2019-04-17 13:11:20
【问题描述】:

在 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 = ?

【问题讨论】:

    标签: django django-channels


    【解决方案1】:

    好的,在阅读了 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
    

    【讨论】:

      猜你喜欢
      • 2013-03-02
      • 1970-01-01
      • 2015-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-24
      相关资源
      最近更新 更多