Передача заголовков каналам Django с использованием Javascript Websockets для аутентификации пользователя с помощью токена - PullRequest
1 голос
/ 05 июля 2019

я понятия не имею, как подключить и аутентифицировать каналы 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 я думал, что это будет работать, но это не работает так что я могу использовать токен, сгенерированный для аутентификации пользователей

Я просто хочу знать, есть ли способ аутентификации пользователей с помощью токена

...