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.
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
