В этом примере кода вам, вероятно, придется открыть соединение с веб-сокетом с помощью:
ws://SERVER:PORT/PATH?1
Все после ?
является строкой запроса. В вашем примере кода строка query_string должна быть идентификатором пользователя, например, 1
.
Вы можете изменить код, чтобы использовать разные строки запроса. Например, вы можете использовать:
from urllib.parse import parse_qs
from django.db import close_old_connections
class QueryAuthMiddleware:
def __init__(self, inner):
# Store the ASGI application we were passed
self.inner = inner
def __call__(self, scope):
# Look up user from query string (you should also do things like
# check it's a valid user ID, or if scope["user"] is already populated)
query_string = parse_qs(self.scope['query_string'])
if b'user_id' in query_string:
user = User.objects.get(id=int(query_string[b'user_id'][0]))
close_old_connections()
else:
user = AnonymousUser
# Return the inner application directly and let it run everything else
return self.inner(dict(scope, user=user))
Теперь вы можете использовать этот URI:
ws://SERVER:PORT/PATH?user_id=1
Вы должны убедиться, что пользователь с идентификатором существует в базе данных. Вы также должны написать реальный код авторизации. Каждый пользователь может подключиться к этому приложению с произвольным идентификатором пользователя. Нет пароля или авторизационного токена.