在项目中想在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 了。