如何给Python SocketIO客户端添加Bearer授权认证
Python SocketIO客户端实现Bearer认证
我开发的软件采用SocketIO通信方式,后端新增了访问令牌用于控制事件访问权限,需要在Python SocketIO客户端中实现Bearer认证。查阅SocketIO文档后未找到Bearer令牌的具体实现方法,请问该如何操作?
实现方案
Python SocketIO客户端支持在连接时自定义请求头,Bearer认证可通过在连接时传入headers参数携带Authorization令牌。以下是修改后的完整代码:
import socketio import json import requests import uuid # 令牌格式:"Bearer 你的实际令牌内容",不要加括号 accessToken = "Bearer your_actual_token_here" value = "" qrid = uuid.uuid4() client_uuid = uuid.uuid4() # 避免与导入的uuid模块重名 url = 'your_api_url_here' myobj = { "qrid": str(qrid), "uuid": str(client_uuid) } sio = socketio.Client() @sio.on('connect', namespace='/mynamespace') def connect(): print("已连接") create = requests.post(url, json=myobj) print(create.text) sio.emit("joinClient", str(client_uuid), namespace='/mynamespace') @sio.on('disconnect', namespace='/mynamespace') def disconnect(): print('已断开连接') @sio.on("room", namespace='/mynamespace') def handle_room_event(data): print('收到数据:', data) eventType = data.get("eventType") if eventType == "openevent": value = data.get("value") print("开门" if value else "不开门") else: print(f"未知事件类型: {eventType}") # --- 主程序 --- print('启动客户端') # 连接时携带Bearer认证头 sio.connect( 'wss://your_socketio_url_here', namespaces=['/mynamespace'], headers={'Authorization': accessToken} ) sio.wait() # 保持客户端运行,持续监听事件
关键修改说明
- 携带Bearer令牌:在
sio.connect()中通过headers参数传入{'Authorization': accessToken},后端可通过请求头获取令牌完成权限验证。 - 修复变量冲突:原代码中
uuid变量名与导入的模块重名,改为client_uuid避免报错。 - 简化数据解析:收到的
data已是Python字典,无需重复执行json.loads(json.dumps(data)),直接通过键名访问即可。 - 保持客户端运行:添加
sio.wait()方法,防止程序连接后立即退出,确保能持续监听后端事件。 - 规范令牌格式:
accessToken需严格遵循"Bearer 实际令牌内容"格式,不要包含多余括号。
内容的提问来源于stack exchange,提问作者techgtec
相关产品推荐
相关产品推荐

