@Safronov_Alexei

Как подключить Django channels к SimpleJWT?

Всем привет!
ПОдскажите пожалуйста,а то у меня не получается.
Делаю приложение на телефон, и надо сделать функцию переписки, подумал,что Django Channels подойдет, но появилась проблема не могу свзяать авторизацию Django Channels и JWT Authorization. Хотя делал многое по документации.

sync def find_user(id):
    #try:
    await NewUser.objects.get(id=id)
    return NewUser.objects.get(id=id)
    # except NewUser.DoesNotExist:
    #     return AnonymousUser()

class TokenAuthMiddleware:
    """
    Custom token auth middleware
    """
    id = 0

    def __init__(self, inner):
        # Store the ASGI application we were passed
        print('FUCK1')
        self.inner = inner

    def __call__(self, scope):

        # Close old database connections to prevent usage of timed out connections
        close_connections()
        print('FUCK2')

        # Get the token
        print('FUCK3')
        token = parse_qs(scope["query_string"].decode("utf8"))["token"][0]

        # Try to authenticate the user
        try:
            # This will automatically validate the token and raise an error if token is invalid
            UntypedToken(token)
        except (InvalidToken, TokenError) as e:
            # Token is invalid
            print(e)
            print('FUCK4')
            return None

        #  Then token is valid, decode it
        decoded_data = jwt_decode(token, settings.SECRET_KEY, algorithms=["HS256"])
        print(decoded_data)
        # Will return a dictionary like -
        # {
        #     "token_type": "access",
        #     "exp": 1568770772,
        #     "jti": "5c15e80d65b04c20ad34d77b6703251b",
        #     "user_id": 6
        # }

        # Get the user using ID
        print('fuck 5')
        id2 = decoded_data["user_id"]
        user = find_user(id2)
        print(user)

        print('fuck 5+1')
        # Return the inner application directly and let it run everything else
        print('fuck 6')
        return self.inner(dict(scope, user=user))


При попытке получить юзера из базы, получаю каратину и никак не могу ее заюзать. Помогите пожалуйста!
  • Вопрос задан
  • 34 просмотра
Пригласить эксперта
Ответы на вопрос 1
@tumbler
бекенд-разработчик на python
Вам асинхронность вообще не нужна, Django ORM всё равно ее не использует. Уберите async/await вообще.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы