前端使用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的登录框。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值