如何在 Django 中设置访问受限的聊天室?也就是说,我们只允许来自在特定聊天室中注册的用户的连接?

Posted

技术标签:

【中文标题】如何在 Django 中设置访问受限的聊天室?也就是说,我们只允许来自在特定聊天室中注册的用户的连接?【英文标题】:How to set up chat rooms with limited access in Django? That is, we allow connections only from users registered in a particular chat room? 【发布时间】:2020-11-25 22:29:51 【问题描述】:

我最近与一位朋友和他的同事一起创建了一个类似社交网络的网站。我有相当多的编程经验,虽然没有使用 Django 的经验。朋友们一般都有中级经验,但与 Django 相比显然比我更多。

我们想要实现聊天室,其行为类似于例如WhatsApp 群组:在某些事件中,服务器可以将用户添加到特定的聊天室,反之也可以将其删除。用户可以在连接后向该聊天室发送和接收消息,并检索自上次在线以来错过的旧消息。

我的问题是不要求实施该系统的标准方法。我们已经有聊天室,每个人都可以通过正确的 URL 加入。然而,这显然还不够,因为我们还不能限制访问。

到目前为止,我们使用的是 Django 频道,并且我们已经按照Channels Tutorial 设置了公共聊天室。

我已经看过django private chat package。但是,我不愿意集成它,因为我试图避免用包使项目混乱,更重要的是,我试图尽量减少我们,尤其是我目前必须学习的新技术。

我的一个想法是将所有有权访问聊天室的用户存储在聊天室模型中。当有人随后尝试连接到聊天室时,我们仅在用户在这些存储的用户中注册时才动态允许它。但是,我对这种方法存在性能、安全性和可维护性方面的问题,目前我作为初学者无法正确评估这些问题。这就是我在这里寻求帮助的原因。更具体地说,我想问是否有任何既定的最佳实践,我认为,由于努力的平凡和简单的性质,有很多。

感谢您提供任何帮助或建议。祝你有美好的一天! 问候,马克:D

【问题讨论】:

【参考方案1】:

我建议您使用数据库模型来跟踪房间,然后从该模型到用户的多对多关系是最好的方法。

然后在消费者中,您可以检查连接的用户是否具有访问权限。此检查只需要在消费者的连接方法中进行,因此不会对性能产生太大影响。

从安全角度来看,您需要处理的主要事情是用户身份验证,这在很大程度上取决于您计划如何使用 websocket,如果它只是通过网页使用,并且用户已经登录到相同的域,或者是否要跨域或从客户端(移动/桌面)应用程序使用。

【讨论】:

以上是关于如何在 Django 中设置访问受限的聊天室?也就是说,我们只允许来自在特定聊天室中注册的用户的连接?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 表单中设置自定义 HTML 属性?

如何在django oscar中设置Paypal重定向网址?

如何在 expo 的 React Native 天才聊天中设置用户头像?

如何在 django 中设置会话永不过期

如何在 django 中设置和获取会话变量?

如何在 Django 模板中设置背景图像?