joh*_*ohn 5 python django websocket django-channels
我不知道如何使用令牌身份验证连接和身份验证 django 通道,因为 javascript websockets 不支持将标头传递给服务器
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))
Run Code Online (Sandbox Code Playgroud)
我找到了有关使用令牌进行身份验证的答案,但问题是我不明白如何将标头传递给服务器
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))
Run Code Online (Sandbox Code Playgroud)
当我手动验证用户时,频道可以识别用户并验证他
我试过了
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)
Run Code Online (Sandbox Code Playgroud)
在同一个类中添加这个函数 TokenAuthMiddleware 我认为这会起作用,但它不起作用,所以我可以使用生成的令牌来验证用户
我只想知道有什么方法可以使用令牌对用户进行身份验证
| 归档时间: |
|
| 查看次数: |
708 次 |
| 最近记录: |