Без AuthMiddlewareStack как я могу получить зарегистрированного пользователя в каналах Django?

Без AuthMiddlewareStack как я могу получить логин, пользователя? Потому что я не использую auth модели, поэтому self.scope['user'] возвращает 'Anonymous'.

Я пытался добавить этот класс AllowedHostsOriginValidator - не работает. Мне нужен сессионный пользователь. пожалуйста, помогите мне.

enter image description here

routing.py

from channels.routing import ProtocolTypeRouter, URLRouter
from django.urls import path
from chat.consumers import ChatConsumer
from channels.auth import AuthMiddlewareStack
from channels.security.websocket import AllowedHostsOriginValidator

application = ProtocolTypeRouter({
'websocket': AllowedHostsOriginValidator(
    AuthMiddlewareStack(
        URLRouter([
        path('ws/chat/pm-with/<str:username>/',ChatConsumer()),
        ])
    )
  )
})

consumers.py

from channels.consumer import SyncConsumer
from asgiref.sync import async_to_sync
from chat.models import user,Thread,Message
from chat.views import ChatView
from django.contrib.sessions.models import Session

class ChatConsumer(SyncConsumer):
    def websocket_connect(self,event):
        me = self.scope['user']
        other_user = self.scope['url_route']['kwargs']['username']
        getOtheruser = user.objects.filter(username = other_user).first()
        
        self.send({
            'type': 'websocket.accept',
        })
    
    def websocket_receive(self,event):
        print("new event is received")
        print(event)
        self.send({
            'type': 'websocket.send',
            'text': event.get('text'),
        })
        
    def websocket_disconnect(self,event):
        print("disconnect event is called")

пользовательские модели

models.py

class user(models.Model):
    id = models.AutoField(primary_key=True)
    first_name = models.CharField(max_length=50,default="", blank=True, null=True)
    last_name = models.CharField(max_length=50,default="", blank=True, null=True)
    username = models.CharField(max_length=50,default="", blank=True, null=True)
    password = models.CharField(max_length=100,default="", blank=True, null=True)
    image = models.ImageField(upload_to ='user_image',default="",blank=True,null=True)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    deleted = models.DateTimeField(default="",blank=True, null=True)
    is_deleted = models.BooleanField(default=False)

Я хочу, чтобы пользователи входили в систему из пользовательских моделей, а не из моделей пользователей auth. пожалуйста, помогите мне в этом

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