如何在Postman中认证WebSocket连接,让Django Channels获取登录用户?
Django Channels WebSocket 认证(Postman 测试方案)
现有代码参考
ASGI 文件
from channels.routing import ProtocolTypeRouter, URLRouter from channels.auth import AuthMiddlewareStack import os import app.routing from django.core.asgi import get_asgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings") application = get_asgi_application() application = ProtocolTypeRouter({ 'http': get_asgi_application(), "websocket": AuthMiddlewareStack( URLRouter( app.routing.websocket_urlpatterns ) ), })
routing.py 文件
from django.urls import path from . import consumers websocket_urlpatterns = [ path('ws/sc/', consumers.MySyncConsumer.as_asgi()), path('ws/ac/', consumers.MyASyncConsumer.as_asgi()), path('ws/test/', consumers.TestConsumer.as_asgi()), path('ws/scg/', consumers.MySyncGroupConsumer.as_asgi()), ]
consumer.py 文件(核心片段)
class MySyncConsumer(SyncConsumer): def websocket_connect(self,event): print("Web socket connected", event) self.send({ 'type':'websocket.accept' }) # 可添加用户验证打印 print("当前用户:", self.scope["user"]) print("Channel layer ",self.channel_layer) print("Channel name", self.channel_name) async_to_sync(self.channel_layer.group_add)("test_consumer_group_1", self.channel_name) # 其他方法省略...
实现Postman WebSocket认证步骤
你的代码已经配置了AuthMiddlewareStack,它默认支持通过Session Cookie识别登录用户,只需在Postman中手动传递session cookie即可:
1. 获取登录用户的Session ID
- 在Postman中发送POST请求到Django登录接口(默认是
/accounts/login/,自定义接口请替换),请求体携带username和password参数。 - 登录成功后,从响应的Cookie中复制
sessionid的值(可在Postman的"Headers"→"Response Cookies"中找到)。
2. 建立带认证的WebSocket连接
- 新建WebSocket请求,输入你的WebSocket地址(比如
ws://localhost:8000/ws/sc/)。 - 切换到"Headers"标签,添加
Cookie头,值格式为:sessionid=你复制的sessionid字符串。 - 点击"Connect",连接成功后,consumer中的
self.scope["user"]就会返回当前登录用户,而非匿名用户。
注意事项
- 若使用
wss协议,需确保Django设置中SESSION_COOKIE_SECURE = True;使用ws协议则设为False,否则Cookie无法正常传递。 - 可在
websocket_connect方法中添加print("当前用户:", self.scope["user"])验证认证是否生效。 - 若项目使用DRF Token认证,需自定义Token认证中间件替换
AuthMiddlewareStack,但Session Cookie方式是最适配现有代码的方案。
内容的提问来源于stack exchange,提问作者Waleed Farrukh
相关产品推荐
相关产品推荐

