You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 21:35:16