强制 Django 通道 Websocket 身份验证

Force Django Channels Websocket Authentication

我正在使用的网站需要使用需要登录的中间件登录每个页面。

我正在尝试添加带有通道的 websockets,以便与客户端 Web 浏览器进行双向通信以获取通知。

Daphne 运行 作为接口服务器,manage.py runworker 运行 工人。

我在 consumers.py 文件中有一个在打开连接时运行的工作函数。

问题是可以打开此连接,并且该功能可以通过任何网络浏览器运行,无需登录。

如何在打开连接之前强制登录?

如果您希望用户登录页面,您可以为您的视图使用装饰器 login_required。 您首先需要导入它

from django.contrib.auth.decorators import login_required

对于视图,您可以将它用作任何其他普通装饰器,例如:-

@login_required
def my_view(request):
    ...

这样做的目的是确保用户在能够查看页面之前已登录。

如果您已经实施了身份验证后端,这会将他带到登录页面,并且在他登录后重定向到您视图中的页面。如果他已经登录,则允许他直接访问该页面。

看到一个 "channels_api" 图书馆,他们做得很好。

您可以将 @channel_session_user_from_http 用于 "websocket.connect",将 @channel_session_user 用于 "websocket.receive"

您可以从 http 会话中获取 message.user


http://channels.readthedocs.io/en/stable/getting-started.html#authentication