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

How to find user from websocket request?

在 django channels 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 频道文档后,我得到了 answer.Here 是文档 https://channels.readthedocs.io/en/1.x/generics.html#sessions-and-users

的 link

会话和用户

如果您希望将 channel_session 或 channel_session_user 与基于 class 的消费者一起使用,只需在 class 正文中设置其中一个变量:

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