【问题标题】:Should I save user backend in database in Django?我应该将用户后端保存在 Django 的数据库中吗?
【发布时间】:2016-02-23 09:51:07
【问题描述】:

我正在创建一个支持本地登录后端和 LDAP 登录(通过django-auth-ldap)的 Django 网站,将来可能会更多。

我正在进入 Django 登录和后端 sutff 并有几个问题 - 主要是 Django 是否有任何理由不将用户创建后端保留在数据库中?出于安全/说服的原因,用户 A 不应该与后端 django.contrib.auth.backends.ModelBackend 链接(链接是指 User 模型上的字段)吗?

我正在着手创建自定义用户模型,并且正在考虑添加此类字段。 明确知道哪个后端曾经/用于创建/登录用户的能力对我来说在逻辑上听起来,但事实上 Django 默认情况下没有,而且我找不到任何东西互联网上的类似情况让我担心我没有想出一个真正很好的理由来说明为什么它会以这种方式完成。

提前致谢,
帕维尔

【问题讨论】:

    标签: python django django-authentication


    【解决方案1】:

    Django 不需要这些信息。一旦用户通过身份验证,并且 django 有一个 User 模型,它并不关心后端是什么对其进行身份验证。用户模型数据存储在一个源中。 User 模型(无论是默认的还是自定义的)是一致的,并且在整个 django 项目和模式中具有相同的属性、功能和行为。开箱即用的 django 中没有任何东西可以处理不同的用户模型。

    您可以使用 AbstractBaseUser 扩展它,但是在同一个项目中管理真正不同的用户,尤其是使用核心 django 模块,是一个延伸。

    Django大量使用用户模型,您必须手动定位它使用的每个位置,并为正确的后端提供您自己的路由器。没有用于此的 API(例如,db 路由器),这将是一堆乱七八糟的 hack,每次升级可能会更加混乱。

    除了自定义用户模型之外,Django 还支持“身份验证后端”。您正在寻找的一些功能在正式 API 中可用并通过此选项公开。所以你可能想坚持下去。 见:https://docs.djangoproject.com/en/1.9/topics/auth/customizing/#authentication-backends

    【讨论】:

    • 感谢您的回答,但我认为您没有理解我的问题 - 我试图将其编辑得更清楚。
    • 我想我做到了。阅读 django 文档,但总而言之,一旦用户通过身份验证并且 django 获得了 User 模型,它并不关心它是从哪里进行身份验证的。您正在寻找在某种程度上与 django 架构非常不同的东西。当然,您可以将所有内容修补到任何内容上,但您不再处于框架思维方式中。
    猜你喜欢
    • 2016-07-26
    • 2019-11-03
    • 2015-05-20
    • 2012-08-08
    • 2019-03-25
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多