【问题标题】:How to solve 401 Unauthorized error in Socket.IO Django framework?如何解决 Socket.IO Django 框架中的 401 Unauthorized 错误?
【发布时间】:2021-04-02 22:46:50
【问题描述】:

我正在尝试让 Socket.IO 与我的 Django 服务器一起工作。这是我的设置:

前端js:

const socket = io.connect('127.0.0.1:8001');
socket.on('connect', () => {
    console.log('socket id: %s\n', socket.id);
});

Django 服务器:

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

sio = socketio.Server(async_mode='eventlet', cors_allowed_origins='*', logger=True, engineio_logger=True)

@sio.event
def connect(sid, environ, auth):
    print('connect ', sid, auth)

static_files = {
    '/public': './static',
}
application = socketio.WSGIApp(sio, application, static_files=static_files)
eventlet.wsgi.server(eventlet.listen(('', 8001)), application)

依赖关系

Django==2.2.11
django-cors-headers==3.0.0
eventlet==0.30.0
gunicorn==19.7.1
python-socketio==4.6.1
...

当我运行 js 时,服务器在到达连接函数之前会返回 401 未授权错误。 前端:

GET http://127.0.0.1:8001/socket.io/?EIO=3&transport=polling&t=NYKlRjO 401 (UNAUTHORIZED)

Django 服务器日志:

(11053) accepted ('127.0.0.1', 34906)
127.0.0.1 - - [02/Apr/2021 15:39:31] "GET /socket.io/?EIO=3&transport=polling&t=NYKlTB8 HTTP/1.1" 401 253 0.002482

但奇怪的是,如果我将连接事件注释掉,其他事件都可以正常工作:

# @sio.event
# def connect(sid, environ, auth):
#     print('connect ', sid, auth)

Django 服务器在同一个端口 8001 上运行。我认为连接事件或套接字上没有任何身份验证检查。任何人都知道为什么如果我设置了connect 事件并且套接字突然停止工作?

【问题讨论】:

    标签: python-3.x django socket.io python-socketio


    【解决方案1】:

    我花了几个小时才弄明白,因为服务器响应代码与这里的问题无关。

    问题是,就我而言,当 js 尝试连接到套接字服务器时,没有 auth 参数,因此 connect 函数将引发异常情况,连接失败,而所有异常都从 @ 987654322@函数会导致401未授权,虽然它可能不是授权问题。

    解决方法很简单,将connect 定义更改为:

    @sio.event
    def connect(sid, environ, auth=''):
        print('connect ', sid, auth)
    

    将解决这个问题。始终从前端 js 获取身份验证令牌也是一个好主意。

    【讨论】:

    • 您正在阅读更新版本的 Python Socket.IO 包的文档。 auth 参数相当新。
    • @Miguel 你是对的,这就是这里发生的事情。谢谢你为我指出。我正在考虑升级python-socketio
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 2020-04-19
    • 2014-04-08
    • 2022-10-20
    • 2022-10-20
    相关资源
    最近更新 更多