Without AuthMiddlewareStack how can I get logged user in Django channels?

Viewed 251

Without AuthMiddlewareStack how can I get logged, user? Because I am not used auth models that's why self.scope['user'] returning the 'Anonymous'.

I tried to add this class AllowedHostsOriginValidator - doesn't work. I want a session user. please help me.

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")

custom user models

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)

I want login users from custom models, not auth user models. please help me for this

0 Answers
Related