initial commit
This commit is contained in:
28
backend/websocket/middleware.py
Normal file
28
backend/websocket/middleware.py
Normal file
@@ -0,0 +1,28 @@
|
||||
# your_app/middleware.py
|
||||
from channels.db import database_sync_to_async
|
||||
from rest_framework.authtoken.models import Token
|
||||
from django.contrib.auth.models import AnonymousUser
|
||||
from urllib.parse import parse_qs
|
||||
|
||||
class QueryAuthMiddleware:
|
||||
"""
|
||||
Custom middleware to authenticate users using a token passed in the WebSocket URL query string.
|
||||
"""
|
||||
def __init__(self, inner):
|
||||
self.inner = inner
|
||||
|
||||
async def __call__(self, scope, receive, send):
|
||||
query_string = scope["query_string"].decode()
|
||||
query_params = parse_qs(query_string)
|
||||
token_key = query_params.get("token", [None])[0]
|
||||
|
||||
if token_key:
|
||||
try:
|
||||
token = await database_sync_to_async(Token.objects.get)(key=token_key)
|
||||
scope["user"] = token.user
|
||||
except Token.DoesNotExist:
|
||||
scope["user"] = AnonymousUser()
|
||||
else:
|
||||
scope["user"] = AnonymousUser()
|
||||
|
||||
return await self.inner(scope, receive, send)
|
||||
Reference in New Issue
Block a user