Python 使用Javascript WebSocket将头传递到Django通道,以使用令牌对用户进行身份验证
我不知道如何使用令牌身份验证连接和验证django通道,因为javascript WebSocket不支持向服务器传递头Python 使用Javascript WebSocket将头传递到Django通道,以使用令牌对用户进行身份验证,python,django,websocket,django-channels,Python,Django,Websocket,Django Channels,我不知道如何使用令牌身份验证连接和验证django通道,因为javascript WebSocket不支持向服务器传递头 class TokenAuthMiddleware: """ Token authorization middleware for Django Channels 2 """ def __init__(self, inner): self.inner = inner def __call__(self, scope)
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)
在同一类中间件中添加此函数
我原以为这样行得通,但行不通
这样我就可以使用生成的令牌对用户进行身份验证
我只是想知道是否有任何方法可以使用令牌对用户进行身份验证是的,您可以,但正如您已经注意到的,您不能传递头。因此,您必须以查询字符串的形式传递令牌,这是不安全的,但这是当前可用的主要选项。其他人在初始连接后进行身份验证,以便他们可以在请求正文中传递令牌,这是安全的。请详细说明并证明您的回答。请检查此处的答案