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)的主要内容,如果未能解决你的问题,请参考以下文章

Premiere 2.0 alpha道的问题

将 OAuth 2.0 用于 Web 服务器应用程序流时无法选择正确的通道

asp.net core 2.0 中的 WCF - 无法为具有权限的 SSL/TLS 安全通道建立信任关系

Django 2.0 新特性

将数据发送到 Django 通道

什么是 django 通道 InMemoryChannelLayer 限制