前端使用Vue3、后端使用Django的项目使用Idap认证时如何实现登出效果

    由于谷歌浏览器的账号密码记住功能,导致每次登出的时候,还会使用原账号密码自动登录,所以页面上看的效果就是登出功能不起作用, 登出后仍能看到业务画面
    
    当前实现IDAP登录方式如下
        当call后台API时,Django中间件从中拦截, 如果request.user.is_authenticated 是false的情况, 进行authenticate认证
        常规的认证是 from django.contrib.auth import authenticate 调用authenticate
        此处根据需求额外实现一个认证后端, 需要在settings.py中注册一下
        AUTHENTICATION_BACKENDS = [
            "user.auth.LDAPAuthBackend", // 指向自己实现的文件
            "django.contrib.auth.backends.ModelBackend", //官方
        ]
        这个认证后端实现了2个方法:get_user(id) 和 authenticate(**credentials) 
        在authenticate方法中, 进行以下处理逻辑:
            有用户名密码, 也就是初次登录的时候,连接ldap的server进行用户密码验证
            没有用户名密码, 但是有HTTP_AUTHORIZATION的时候,解析出用户名密码, 然后连接ldap的server进行用户密码验证
            最后是其他的验证, 如果需要验证用户是否在有效期内,在不在用户表里等等 可以在此处加逻辑验证
    问题:由于点击登出按钮调用后端的django.contrib.auth 中的 logout方法后, 再次call API的时候, 仍可发送HTTP_AUTHORIZATION。 所以登出功能失效
    解决方案:
        点击登出按钮的时候发送一个错误的用户名密码, 这时后台会报401错误,要求前台重新登录, 
        但是此时前台没有ldap的弹出框, 所以要在401返回的时候, 重新刷新页面, 此时会显示ldap的登录框。


版权声明:本文为weixin_39294329原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。