为了账号安全,请及时绑定邮箱和手机立即绑定

如何为 Django 用户列出可用的身份验证后端?

如何为 Django 用户列出可用的身份验证后端?

慕标琳琳 2021-08-24 16:36:02
我有一个使用内置模型的项目Python 3.6以及Django 1.11在何处使用内置User模型。用户对象都在默认数据库(即postgres)中,但该项目使用第二个身份验证后端,因为某些用户需要针对旧Oracle数据库进行身份验证。# settings.pyAUTHENTICATION_BACKENDS = [    'django.contrib.auth.backends.ModelBackend',   # new postgres DB    'project_config.auth_backends.OtherBackend',   # legacy Oracle DB]到目前为止,这工作正常,但现在我有 3 组用户:一些用户只能进行身份验证,ModelBackend因为他们不在旧数据库中(因为他们是新用户)。一些用户只能在旧数据库中进行身份验证;他们有,usr.has_usable_password() == False因为他们还没有在新postgres数据库中设置密码。一些用户可以在两个后端进行身份验证,甚至可能每个后端都使用不同的密码;这是因为他们在新系统中更改了密码,但按照设计,更改不会传输回旧数据库(不要拍我,在旧数据库中更改密码的唯一方法是通过用户界面)。出于审计目的,我想列出所有用户并查看每个用户都有哪些后端可用(暂时忽略该is_active标志)以使审计任务更容易。我的想法是使用类似于这个循环:for usr in User.objects.all():    backend_list = []    if usr.has_usable_password():        backend_list.append('ModelBackend')    if ... :                                  # what should I check here ?        backend_list.append('OtherBackend')    print(usr, backend_list)我没有旧数据库的每个用户的密码,所以想法可能吗?我还没有找到方法,但我愿意接受建议。
查看完整描述

1 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

最后,我不得不接受@ivissani 的建议并查询旧Oracle数据库中的用户表:

select * from all_users;

有了这些信息,我可以将它与postgres数据库中的用户进行比较,并找出哪些用户只出现在一个或两个中。


查看完整回答
反对 回复 2021-08-24
  • 1 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号