Django 通道 2.0 websocketbridge.js 403 当 self.code(code=1007)
Posted
技术标签:
【中文标题】Django 通道 2.0 websocketbridge.js 403 当 self.code(code=1007)【英文标题】:Django channels 2.0 websocketbridge.js 403 when self.code(code=1007) 【发布时间】:2018-04-24 19:24:53 【问题描述】:我正在为聊天室运行 django 频道 2.0。在连接期间,我检查房间名称。如果它不存在,我使用 self.code(code=1007) 拒绝连接。 ASGI 日志显示成功拒绝如下:
WebSocket REJECT /ws/discuss/asdf/asdf1
但是,在客户端的 js 库 websocketbridge(安装中的股票)抛出了一个意外的异常,如下所示:
Error during WebSocket handshake: Unexpected response code: 403
在打印以控制台接收到的参数。我得到以下信息:
CloseEvent isTrusted: true, wasClean: false, code: 1006...
我想在前端捕获消费者抛出的错误码1007,以便优雅地处理拒绝。
任何帮助将不胜感激。
提前致谢。
【问题讨论】:
【参考方案1】:我犯的错误是在消费者的连接方法中,我没有通过使用 self.accept() 来接受问题。我首先接受了连接,并在评估条件后发出了 self.close(code=4004)。我可能错了,但我希望在满足条件之前不接受连接。
【讨论】:
您解决了这个问题吗?我有同样的问题,无论我在 self.close 中指定什么代码,CloseEvent 总是:CloseEvent isTrusted: true, wasClean: false, code: 1006...
感谢您发布您的答案,这也帮助了我。我在 Django 用户组中提出了这个问题,它是预期的行为:groups.google.com/forum/#!topic/django-users/4BEbwPTP2gs 只有在接受套接字后才能返回自定义关闭代码。在接受之前关闭它会导致返回 http 403,然后关闭代码是特定于浏览器的(但通常是 1006)。以上是关于Django 通道 2.0 websocketbridge.js 403 当 self.code(code=1007)的主要内容,如果未能解决你的问题,请参考以下文章
将 OAuth 2.0 用于 Web 服务器应用程序流时无法选择正确的通道