Django Канал сеанса не является постоянным. отключить -> вышел из системы - PullRequest
0 голосов
/ 04 марта 2020

У меня есть websocket-router:

application = ProtocolTypeRouter({
    'websocket': 
    AllowedHostsOriginValidator(
        AuthMiddlewareStack(
            URLRouter(
                [
                    url("ws/", Consumer)
                ]
            )
        )
    )
})

Я вхожу в систему, отправляя команду в websocket. Пользователь входит в систему следующим образом:

if cmd == 'login':
    user = await database_sync_to_async(authenticate)(consumer.scope, email=request['eMail'], password=request['pass'])
    if user is not None:
        # login the user to this session.
        await login(consumer.scope, user, backend='allauth.account.auth_backends.AuthenticationBackend')
        # save the session
        consumer.scope['session'].modified = True
        await database_sync_to_async(consumer.scope['session'].save)()

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

consumer.scope['session'].save()

, но он не работает. Сеанс не является постоянным.

Как я могу решить эту проблему?

1 Ответ

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

какой бэкэнд сеанса вы используете в Django.

Из-за того, как веб-сокеты работают после создания соединения, вы не можете устанавливать куки, поэтому, если вы используете бэкэнд сеанса, который зависит от cook ie хранилище save не будет иметь никакого эффекта, поскольку веб-браузер не может быть обновлен.

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

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