由于谷歌浏览器的账号密码记住功能,导致每次登出的时候,还会使用原账号密码自动登录,所以页面上看的效果就是登出功能不起作用, 登出后仍能看到业务画面
当前实现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的登录框。
前端使用Vue3、后端使用Django的项目使用Idap认证时如何实现登出效果
最新推荐文章于 2023-05-03 16:16:41 发布