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

我有一个使用内置模型的项目Python 3.6以及Django 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因为他们不在旧数据库中(因为他们是新用户)。

一些用户只能在旧数据库中进行身份验证;他们有,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)

我没有旧数据库的每个用户的密码,所以想法可能吗?


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


慕标琳琳
浏览 134回答 1
1回答

猛跑小猪

最后,我不得不接受@ivissani 的建议并查询旧Oracle数据库中的用户表:select * from all_users;有了这些信息,我可以将它与postgres数据库中的用户进行比较,并找出哪些用户只出现在一个或两个中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python