首页 > 解决方案 > 在 django 中注销使用 HTTP Apache LDAP 登录的用户的解决方法

问题描述

在 Django 2.2 应用程序中,用户可以通过在浏览器提示中提供用户名和密码来“通过 http (Apache LDAP)”登录(如下所示):

在此处输入图像描述

问题是当我使用logout定义的默认 django 注销用户时django.contrib.auth,用户仍然能够访问应用程序。login简单来说,djangologout对应用程序没有任何影响。

我了解到,注销用户的唯一方法是关闭浏览器窗口。但我想使用 django 实现注销功能。

在对这个问题进行了一些谷歌搜索之后,我在这里找到了一些相关的东西,它显示了以下方法:

class HttpAuthMiddleware(object):
    def process_request(self, request):
        if request.path == '/accounts/logout/':
            httpResponse = HttpResponse()
            httpResponse.status_code = 401
            httpResponse.headers['WWW-Authenticate'] = 'Basic realm="<same realm as in the http server>"'
            return httpResponse
        else:
            # check for http headers - maybe the user is already logged in using http auth
            ...

这是注销功能的解决方法。它基本上检查request.path == '/accounts/logout/'哪些有助于我使用默认的 djangologout功能。

我希望此代码段将用户重定向回浏览器提供的相同登录提示(如上图所示)。但是我需要一些帮助来完成上述代码片段并将其添加到我的项目中。

请分享您对此的了解,即使它不能完全帮助我。

谢谢你尽你所能的帮助!

标签: python-3.xdjangoapachehttphttp-headers

解决方案


您不能同时执行 401 的问题是未经授权的状态和重定向需要 301 或 302。但是您可以做的是向上述响应发送正文,该响应可以自动将浏览器重定向到登录页面。

例子

<html>
<body onload='go2Login()'>
   <h3>You have loggout successfully</h3>
<script type='text/javascript'>
   function go2Login(){
       window.location.href='../login/'
   }
</body>
</html>

希望它有效。


推荐阅读