Всем привет!
ПОдскажите пожалуйста,а то у меня не получается.
Делаю приложение на телефон, и надо сделать функцию переписки, подумал,что 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))
При попытке получить юзера из базы, получаю каратину и никак не могу ее заюзать. Помогите пожалуйста!