【问题标题】:Why does django need a database for custom authentication backends?为什么 django 需要一个用于自定义身份验证后端的数据库?
【发布时间】:2012-06-08 03:14:10
【问题描述】:

我实现了一个 django 自定义身份验证后端。我的 authenticate() 返回一个类似 return User(username=username, password=password) 的用户对象,但我从不将用户对象存储到数据库中。

  1. 为什么 django 文档建议使用用户对象创建数据库? (https://docs.djangoproject.com/en/1.4/topics/auth/#writing-an-authentication-backend - “......处理这个问题的最佳方法是为每个用户创建一个 Django User 对象存在于您的后端...")

  2. 如果我尝试调用 login(),则会调用数据库。如果登录名存储在会话中,为什么需要数据库? (使用缓存会话)

【问题讨论】:

    标签: django django-authentication


    【解决方案1】:

    不少应用程序都有auth.User 的外键;如果您没有填充该表,那么您将无法使用这些应用程序。

    【讨论】:

      【解决方案2】:

      您特别需要保存User 对象的原因是应用程序通常会在对象和用户之间创建数据库级别的关系(以便在多个请求中保持关系)。

      一个简单的例子是django.contrib.admin 中的活动日志。它显示用户最近执行的行为。这仅在用户对象保存到数据库时有效。

      【讨论】:

      • 谢谢,有道理。将用户存储在两个不同的数据库中对我来说似乎很奇怪 1) 自定义后端 2) django 数据库。例如,如果用户更改了密码,则需要进行一些额外的记账,以确保在两个地方都进行了更改。
      • 是的,这对于您的用例来说肯定很尴尬。整个auth.User 情况是关于如何使其更灵活的持续讨论领域。
      猜你喜欢
      • 2010-10-11
      • 2018-02-24
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 2019-01-23
      • 1970-01-01
      • 2015-07-31
      • 2011-01-24
      相关资源
      最近更新 更多