Как найти пользователя по запросу websocket?

#django #django-channels

#django #django-каналы

Вопрос:

В django channels 2.1.2 мы можем получить аутентифицированного зарегистрированного пользователя, выполнив следующие действия:

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

Как мне найти зарегистрированного пользователя в случае каналов 1.1.8 при наследовании WebsocketConsumer от channels.generic.websockets

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

Ответ №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 для объекта message — как того, который передается вашему обработчику в качестве аргумента, так и 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