Каналы Django всегда возвращают AnonymousUser при использовании Django Authentication

я изучаю django channels. Я следую документации по каналам: https://channels.readthedocs.io/en/stable/topics/authentication.html

Когда я пытаюсь получить доступ к user с помощью self.scope["user"] в consumers.py, я всегда получаю объект AnonymousUser

Я могу видеть вошедшего пользователя в шаблонах. Я использовал пользователя admin для тестирования.

Примечание: Я здесь новичок. Пожалуйста, дайте мне знать, если мне нужно предоставить дополнительную информацию. Спасибо

consumers.py

from channels.generic.websocket import WebsocketConsumer, AsyncWebsocketConsumer
import time
import asyncio
from pprint import pprint
from asgiref.sync import async_to_sync

class MyWebsocketConsumer(WebsocketConsumer):
    def connect(self):
        print("connected")
        pprint(self.scope)
        pprint(self.scope['user'].username)
        
        self.room_name = self.scope['url_route']['kwargs']['room']
        group_add = async_to_sync(self.channel_layer.group_add)
        group_add(self.room_name, self.channel_name)

        self.accept()

    def receive(self, text_data=None, bytes_data=None):
        pprint(self.scope['user'].is_authenticated)
        print('msg received', text_data)

        group_send = async_to_sync(self.channel_layer.group_send)
        message = {
        'type': 'chat.message',
        'msg': text_data
        }
        group_send(self.room_name, message)

        # self.send(text_data)

    def chat_message(self, event):
        msg = event['msg']
        self.send(msg)

    def disconnect(self, close_code):
        print("disconnected", close_code)

routing.py

from django.urls import path
from . import consumers

websocket_urlpatterns = [
    path('ws/wsc/<str:room>', consumers.MyWebsocketConsumer.as_asgi()),
    # path('ws/awsc/', consumers.MyAsyncWebsocketConsumer.as_asgi())
]

asgi.py

import os
from channels.routing import ProtocolTypeRouter, URLRouter
import app.routing
from django.core.asgi import get_asgi_application
from channels.auth import AuthMiddlewareStack
from channels.security.websocket import AllowedHostsOriginValidator


os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'websocket_consumer.settings')

wsgi_app = get_asgi_application()
application = ProtocolTypeRouter({
    'http': wsgi_app,
    'websocket': AllowedHostsOriginValidator(
    AuthMiddlewareStack(
    URLRouter(
        app.routing.websocket_urlpatterns))
    )
    })

settings.py

Вернуться на верх