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

2024-06-17 12:19:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个使用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中进行身份验证,因为他们不在旧数据库中(因为他们是新用户)。你知道吗
  • 一些用户只能在遗留数据库中进行身份验证;他们拥有^{},因为他们还没有在新的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)

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

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


Tags: 项目用户auth身份验证backend数据库密码db
1条回答
网友
1楼 · 发布于 2024-06-17 12:19:51

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

select * from all_users;

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

相关问题 更多 >