Как разрешить только зарегистрированным пользователям подключаться к веб-сокету на Django каналах? - PullRequest
1 голос
/ 14 марта 2020

У меня есть приложение чата, и я хочу, чтобы только пользователи, вошедшие в систему, могли подключаться к веб-сокету.

Как этого добиться?

Есть ли что-то вроде @login_required декоратор для Django каналов?

Я знаю из документации, что именно так вы можете получить доступ к пользователю:

class ChatConsumer(WebsocketConsumer):

    def connect(self, event):
        self.user = self.scope["user"]

Но как отказать в соединении, если пользователь не ' т вошли в систему?

Ответы [ 2 ]

1 голос
/ 14 марта 2020

Я разобрался с ответом на мой вопрос:

# mysite/routing.py

from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
import chat.routing

application = ProtocolTypeRouter({
    # (http->django views is added by default)
    'websocket': AuthMiddlewareStack(
        URLRouter(
            chat.routing.websocket_urlpatterns
        )
    ),
})
class ChatConsumer(WebsocketConsumer):
    def connect(self):
        self.user = self.scope['user']

        if self.user.is_authenticated:
            # accept connection if user is logged in
            self.accept()

        else:
            # don't accept connection if user is not logged in 
            self.close()


1 голос
/ 14 марта 2020

AuthMiddlewareStack заполнит область подключения ссылкой на текущего пользователя, прошедшего проверку подлинности, аналогично тому, как AuthenticationMiddleware Django заполняет объект запроса функции представления для текущего пользователя, прошедшего проверку подлинности.

Пример добавления AuthMiddlewareStack, как показано ниже:

# mysite/routing.py
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
import chat.routing

application = ProtocolTypeRouter({
    # (http->django views is added by default)
    'websocket': AuthMiddlewareStack(
        URLRouter(
            chat.routing.websocket_urlpatterns
        )
    ),
})

Ссылка: https://channels.readthedocs.io/en/latest/tutorial/part_2.html#write -первый потребитель

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...