Django каналы AnnonymousUser в веб-браузере Safari
У меня есть чат, где после входа в систему вы можете отправить сообщение, но если вы не вошли в систему, вы не можете отправить его, потому что вы AnnonymousUser и потребитель не может взять ваше имя.
В браузере Safari после входа в систему я захожу на 127.0.0.1:3000/chat и автоматически выхожу из системы, но если я делаю это с помощью открытых инструментов разработчика, то я все равно вхожу в систему и могу отправить сообщение. В другом браузере (firefox) все работает нормально.
Я понятия не имею. Спасибо за помощь
class ChatRoomConsumer(WebsocketConsumer):
def connect(self):
self.user = self.scope["user"]
self.to_user = 'testowy'
async_to_sync(self.channel_layer.group_add)(self.to_user, self.channel_name)
self.accept()
def disconnect(self, code):
async_to_sync(self.channel_layer.group_discard)(
self.to_user,
self.channel_name
)
def receive(self, text_data=None, bytes_data=None):
text_data_json = json.loads(text_data)
message = text_data_json['message']
now = timezone.now()
async_to_sync(self.channel_layer.group_send)(
self.to_user,
{
"type": "chat_message",
"message": message,
"user": self.user.email,
"datetime": now.isoformat(),
}
)
def chat_message(self, event):
self.send(text_data=json.dumps(event))
export const Chat = () => {
const [messages, setMessages] = useState([])
const [client, setClient] = useState({})
useEffect(()=> {
const token = sessionStorage.getItem('access_token')
const client = new W3CWebSocket('ws://127.0.0.1:8000/ws/chat/?token=' + token)
setClient(client)
},[])
client.onmessage = (event) => {
const data = JSON.parse(event.data)
const fullMessage = {
"message": data.message,
"datetime": data.datetime,
"user": data.user
}
setMessages((prevState) => [...prevState, fullMessage])
}
let corpusMessages
if(messages.length > 0){
corpusMessages = (
<Grid>
{messages.map((fullMessage)=>{
return (
<Grid container>
<Grid item xs={12}>
<Typography variant="caption">
{fullMessage.user}
</Typography>
</Grid>
<Grid item xs={12}>
<Typography variant="caption">
{fullMessage.datetime}
</Typography>
</Grid>
<Grid item xs={12}>
<Typography variant="h5">
{fullMessage.message}
</Typography>
</Grid>
</Grid>
)
})}
</Grid>)
}
const sendMessage = (event) => {
event.preventDefault()
let dataForm = new FormData(event.currentTarget)
const messageFromForm = dataForm.get('message')
console.log(messageFromForm)
const data = JSON.stringify({message:messageFromForm})
client.send(data)
}
return(
<Grid>
{corpusMessages}
<Box
component='form'
onSubmit={sendMessage}
>
<TextField
name="message"
>
</TextField>
<Button variant={"outlined"} type={"submit"}>Send</Button>
</Box>
</Grid>
)
}