【问题标题】:Force Django Channels Websocket Authentication强制 Django 通道 Websocket 身份验证
【发布时间】:2016-11-22 04:22:19
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: python django channels


    【解决方案1】:

    您可以将@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

    【讨论】:

      【解决方案2】:

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

      from django.contrib.auth.decorators import login_required
      

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

      @login_required
      def my_view(request):
          ...
      

      这将确保用户在查看页面之前已登录。

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

      【讨论】:

      • 我正在使用需要登录的中间件来拦截对站点的所有请求。
      • 你有没有在中间件中指定settings.LOGIN_URL
      • 是的,并且在未登录时对所有 url 的任何请求都会重定向到 /login 模板。
      【解决方案3】:

      查看"channels_api" 图书馆,他们做得很好。

      【讨论】:

        猜你喜欢
        • 2021-03-25
        • 2018-11-26
        • 2017-01-23
        • 2011-09-04
        • 2019-11-02
        • 1970-01-01
        • 2021-09-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多