在项目中想在websocket中加入认证

我是把 JWTtoken 加到了url 后面 ?之后 例如

var socket = new WebSocket('ws://'+window.location.host +'/wx/role/2/?eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjozOCwidXNlcm5hbWUiOiJobGx5em1zIiwiZXhwIjoxNTkwMjEyMDc1LCJlbWFpbCI6ImhAMTIzLmNvbSJ9.Zrh07IUmk5nJ3hXFHnNac6t5ai4Z7e2hQWS4WFpgLVI');

自己写的认证 ws_authentication.py

from django.contrib.auth import get_user_model
from django.contrib.auth.models import AnonymousUser
from django.db import close_old_connections
from rest_framework_jwt.authentication import jwt_decode_handler
class QueryAuthMiddleware:
    def __init__(self, inner):
        self.inner = inner
    def __call__(self, scope):
        close_old_connections()
        # User = get_user_model()
        # user = User.objects.first()
        token = scope["query_string"]
        print(token)
        token = token.decode("utf-8")
        user = AnonymousUser()
        if token:
            user = authenticate(token)
        print("*****")
        return self.inner(dict(scope, user=user))
def authenticate(jwt_value):
        payload = jwt_decode_handler(jwt_value)
    except Exception:
        user = AnonymousUser()
        print("-----------")
        return user
    user = authenticate_credentials(payload)
    return user
def authenticate_credentials(payload):
    username = payload.get('username')
        User = get_user_model()
        user = User.objects.get(username=username)
    except Exception:
        user= AnonymousUser()
    return user

使用上面的认证

from channels.auth import AuthMiddlewareStack from channels.routing import ProtocolTypeRouter, URLRouter, ChannelNameRouter from django.contrib.auth.models import AnonymousUser import users.routing from users import consumers from .ws_authentication import QueryAuthMiddleware application = ProtocolTypeRouter({ # (http->django views is added by default) 'websocket': QueryAuthMiddleware( URLRouter( users.routing.websocket_urlpatterns "channel": ChannelNameRouter({ "service-detection": consumers.ServiceConsumer, 在项目中想在websocket中加入认证我是把 JWTtoken 加到了url 后面 ?之后例如var socket = new WebSocket('ws://'+window.location.host +'/wx/role/2/?eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjozOCwidXNlcm5hbWUiOiJobGx... 'ws:// localhost:8000 / ws / chat / ROOM1 /?token = {JWT} 在routing.py中 从.auth_token导入TokenAuthMiddleware application = ProtocolTypeRouter({“ websocket”:OriginValidator(TokenAuthMiddleware(URLRouter([//])),[“ *”]),})
Django channels websocket 实现自定义token认证前因实现 项目中不是常规的用户认证模式,是license认证模式,故不能采用jwt模式需要写自己的token认证方式,django的中间件对websocket不起作用。 解决方案为使用websocket的Sec-WebSocket-Protocol子协议: 前端侧修改 ,在前端新建websocket客户端,将token值加入Sec-WebSocket-Protocol: var websocket = new We
这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题 于是乎,我自己开发了一款面试宝典,希望能帮到大家,也希望有更多的Python新人真正加入从事到这个行业里,让python火不只是停留在广告上。 微信小程序搜索:Python面试宝典 或可关注原创个人博客:https://lienze.tech 也可关注微信公众号,不定时发送各类有趣猎奇的技术文章:Python编程学习 Websocket
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、安装好channels库后,在asgi设置好websocket路由二、使用步骤1.新建 channelsmiddleware.py 文件1.往 channelsmiddleware.py 添加总结 channels 使用 djangorestframework-simplejwt 的token 验证用户有效性 提示:以下是本篇文章正文内容,下面案例可供参考 一、安装好channels库后,在asgi设置好webs.
https://mp.weixin.qq.com/s/hqaPrPS7w3D-9SeegQAB2Q本人的demo路径https://github.com/aawuliliaa/python-test/tree/master/WebSocket 1.WebSocket是什么? 1.1首先讲解下全双工--半双工--单工 通信允许数据在两个方向上同时传输。 全双工可以同时进行信号的双向传输,即...
要在 Django admin 中开启 JWT 认证,你可以按照下面的步骤操作: 1. 安装 djangorestframework-jwt 库,在你的项目目录下运行以下命令: pip install djangorestframework-jwt 2. 在你的 Django 项目的 settings.py 文件中添加以下内容: INSTALLED_APPS = [ 'rest_framework_jwt', MIDDLEWARE = [ 'django.contrib.auth.middleware.AuthenticationMiddleware', JWT_AUTH = { 'JWT_VERIFY_EXPIRATION': True, 'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1), 3. 在你的 Django 项目的 urls.py 文件中添加以下内容: from django.contrib import admin from django.urls import include, path urlpatterns = [ path('admin/', admin.site.urls), path('api-auth/', include('rest_framework.urls')), path('api-token-auth/', obtain_jwt_token), 4. 运行 migrate 命令来应用这些修改: python manage.py migrate 这样,你就可以使用 JWT 认证来登录 Django admin 了。