Без AuthMiddlewareStack как я могу получить зарегистрированного пользователя в каналах Django?
Без AuthMiddlewareStack как я могу получить логин, пользователя? Потому что я не использую auth модели, поэтому self.scope['user'] возвращает 'Anonymous'.
Я пытался добавить этот класс AllowedHostsOriginValidator - не работает. Мне нужен сессионный пользователь. пожалуйста, помогите мне.
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. пожалуйста, помогите мне в этом