如何在Django频道上使用令牌身份验证对Websocket进行身份验证?

编程入门 行业动态 更新时间:2024-10-27 00:35:19
本文介绍了如何在Django频道上使用令牌身份验证对Websocket进行身份验证?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我们想对Websocket使用django-channels,但是我们也需要进行身份验证。我们有一个运行django-rest-framework的rest api,在那里我们使用令牌对用户进行身份验证,但是django-channels中似乎没有内置相同的功能。

We want to use django-channels for our websockets but we need to authenticate as well. We have a rest api running with django-rest-framework and there we use tokens to authenticate a user, but the same functionality does not seem to be built into django-channels.

推荐答案

对于Django-Channels 2,您可以编写自定义身份验证中间件 gist.github/rluts/22e05ed8f53f97bdd02eafdf38f3d60a

For Django-Channels 2 you can write custom authentication middleware gist.github/rluts/22e05ed8f53f97bdd02eafdf38f3d60a

token_auth.py:

token_auth.py:

from channels.auth import AuthMiddlewareStack from rest_framework.authtoken.models import Token from django.contrib.auth.models import AnonymousUser 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))

routing.py:

routing.py:

from django.urls import path from channels.http import AsgiHandler from channels.routing import ProtocolTypeRouter, URLRouter from channels.auth import AuthMiddlewareStack from yourapp.consumers import SocketCostumer from yourapp.token_auth import TokenAuthMiddlewareStack application = ProtocolTypeRouter({ "websocket": TokenAuthMiddlewareStack( URLRouter([ path("socket/", SocketCostumer), ]), ), })

更多推荐

如何在Django频道上使用令牌身份验证对Websocket进行身份验证?

本文发布于:2023-10-10 12:13:21,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1478640.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:身份验证   令牌   如何在   频道   Websocket

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!