Как найти пользователя по запросу websocket? - PullRequest
1 голос
/ 17 апреля 2019

В каналах django 2.1.2 мы можем получить зарегистрированного пользователя, прошедшего проверку подлинности, следующим образом:

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

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

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

1 Ответ

0 голосов
/ 17 апреля 2019

Хорошо, прочитав документацию по каналам 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
...