я понятия не имею, как подключить и аутентифицировать каналы django с помощью аутентификации токена, потому что javascript websockets не поддерживает передачу заголовков на сервер
class TokenAuthMiddleware:
"""
Token authorization middleware for Django Channels 2
"""
def __init__(self, inner):
self.inner = inner
def __call__(self, scope):
headers = dict(scope['headers'])
if b'authorization' in headers:
try:
token_name, token_key = headers[b'authorization'].decode().split()
if token_name == 'Token':
token = Token.objects.get(key=token_key)
scope['user'] = token.user
except Token.DoesNotExist:
scope['user'] = AnonymousUser()
return self.inner(scope)
TokenAuthMiddlewareStack = lambda inner: TokenAuthMiddleware(AuthMiddlewareStack(inner))
Я нашел этот ответ относительно аутентификации с использованием токена, но дело в том, что я не понимаю, как передавать заголовки на сервер
token = Token.objects.get(key='175f76fd9b63a9477bf5f9a6f2e9a7f12ac62d65')
if token.user:
scope['user'] = token.user
else:
scope['user'] = AnonymousUser()
return self.inner(scope)
TokenAuthMiddlewareStack = lambda inner: TokenAuthMiddleware(AuthMiddlewareStack(inner))
когда я вручную аутентифицирую пользователей, каналы могут распознавать пользователя и аутентифицировать его
Я пытался
def get(request):
for user in User.objects.all():
token=Token.objects.get_or_create(user=request.user)
if token.user:
print("ok")
else:
print("not okay")
print(token)
добавление этой функции в тот же класс TokenAuthMiddleware
я думал, что это будет работать, но это не работает
так что я могу использовать токен, сгенерированный для аутентификации пользователей
Я просто хочу знать, есть ли способ аутентификации пользователей с помощью токена