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

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