强制 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
我正在使用的网站需要使用需要登录的中间件登录每个页面。
我正在尝试添加带有通道的 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