Принудительная аутентификация через веб-сокет каналов Django

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

Я пытаюсь добавить веб-сокеты с каналами для двусторонней связи с клиентским веб-браузером для уведомлений.

Daphne работает как сервер интерфейса, а runworker manage.py запускает рабочие процессы.

У меня есть рабочая функция в файле Consumer.py, которая запускается при открытии соединения.

Проблема в том, что это соединение можно открыть, и функция запускается любым веб-браузером без входа в систему.

Как я могу принудительно войти в систему, прежде чем соединение можно будет открыть?


person JohnBoy    schedule 22.11.2016    source источник


Ответы (3)


Вы можете использовать @channel_session_user_from_http вместо "websocket.connect", @channel_session_user вместо "websocket.receive".

Вы можете получить message.user из http-сессии.


http://channels.readthedocs.io/en/stable/getting-started.html#authentication

person Robert Lu    schedule 08.04.2017

Если вы хотите, чтобы пользователь вошел в систему на странице, вы можете использовать декоратор login_required для своих представлений. Сначала вам нужно импортировать его

from django.contrib.auth.decorators import login_required

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

@login_required
def my_view(request):
    ...

Что это сделает, так это гарантирует, что пользователь вошел в систему, прежде чем он сможет просматривать страницу.

Это перенаправит его на страницу входа, если вы реализовали серверную часть аутентификации, и после того, как он войдет в систему, перенаправит его на страницу в вашем представлении. Если он уже вошел в систему, ему разрешен прямой доступ к странице.

person Shashishekhar Hasabnis    schedule 22.11.2016
comment
Я использую промежуточное ПО, требующее входа в систему, которое перехватывает все запросы к сайту. - person JohnBoy; 22.11.2016
comment
Вы указали settings.LOGIN_URL в промежуточном программном обеспечении - person Shashishekhar Hasabnis; 22.11.2016
comment
Да, и любой запрос ко всем URL-адресам без входа в систему перенаправляется на шаблон /login. - person JohnBoy; 22.11.2016

Посмотрите библиотеку "channels_api", они отлично справляются со своей задачей.

person Luís De Marchi    schedule 04.04.2017