23 lines
		
	
	
		
			855 B
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			23 lines
		
	
	
		
			855 B
		
	
	
	
		
			Python
		
	
	
	
| from rest_framework_simplejwt.authentication import JWTAuthentication
 | |
| from asgiref.sync import sync_to_async
 | |
| 
 | |
| @sync_to_async
 | |
| def _get_user(token: str):
 | |
|     jwt = JWTAuthentication()
 | |
|     return jwt.get_user(jwt.get_validated_token(token))
 | |
| 
 | |
| class TokenAuthMiddleware:
 | |
|     def __init__(self, app) -> None:
 | |
|         self.app = app
 | |
| 
 | |
|     async def __call__(self, scope, receive, send):
 | |
|         # Look up user from query string (you should also do things like
 | |
|         # checking if it is a valid user ID, or if scope["user"] is already
 | |
|         # populated).
 | |
|         from urllib.parse import parse_qs
 | |
|         token = parse_qs(str(scope["query_string"], 'UTF-8')).get('token', [None])[0]
 | |
|         if token:
 | |
|             user = await _get_user(token)
 | |
|             if user:
 | |
|                 scope['user'] = user
 | |
|                 return await self.app(scope, receive, send) |