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



我有一个使用Python 3.6Django 1.11的项目,其中我使用内置的User模型。

用户对象都在默认数据库(即postgres(中,但该项目使用第二个身份验证后端,因为一些用户需要根据传统的Oracle数据库进行身份验证。

# settings.py
AUTHENTICATION_BACKENDS = [
'django.contrib.auth.backends.ModelBackend',   # new postgres DB
'project_config.auth_backends.OtherBackend',   # legacy Oracle DB
]

到目前为止,这很好,但现在我有3组用户:

  • 有些用户只能在ModelBackend中进行身份验证,因为他们不在旧数据库中(因为他们是新用户(
  • 一些用户只能在遗留数据库中进行身份验证;他们具有CCD_ 7,因为他们还没有在新的CCD_
  • 有些用户可以在两个后端进行身份验证,甚至可以在每个后端使用不同的密码;这是因为他们在新系统中更改了密码,但根据设计,更改不会传输回遗留数据库(不要对我开枪,在遗留数据库中更改密码的唯一方法是通过用户界面手动进行(

出于审核目的,我想列出所有用户,并查看每个用户都有哪些后端可用(暂时忽略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)

我并没有遗留数据库中每个用户的密码,所以这个想法可能吗?

我还没有找到办法,但我愿意接受建议。

最后,我不得不接受@ivissani的建议,并查询遗留OracleDB:中的users表

select * from all_users;

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

最新更新