【问题标题】:Django: Two Users with the same usernameDjango:具有相同用户名的两个用户
【发布时间】:2010-02-20 22:58:46
【问题描述】:

如何扩展 Auth 以允许多个用户使用相同的用户名。在 SAAS 中,这是需要的,因为两个帐户可能有一个名为“所有者”或类似名称的用户。

【问题讨论】:

  • 我宁愿为他们分配角色。如果您希望用户拥有用户名“所有者”,这看起来更像是一个授权问题。
  • @Felix 我想​​我需要更清楚。我不是在制造用户。我的帐户持有人是。

标签: django django-authentication


【解决方案1】:

您可能可以将 User 模型和 write a custom authentication backend 子类化为您的新模型。

但首先我会问自己“我真的需要这个吗?”。让多个用户使用相同的用户名听起来很混乱。

【讨论】:

  • @Ludwik 我绝对需要它。如何控制我的帐户持有人决定使用的用户名? 250 个帐户都可以归一个名叫马克的人所有。这些用户名不适合我和我的团队。
  • @Ludwik 感谢您的链接。我,由于某种原因,昨天找不到那个部分。 +1
【解决方案2】:

“用户名”的问题在于,在一个拥有相当规模人口的网站上,Spencer's Lament (Henry Spencer @ U Toronto, Dept. of Zoology) 发挥了作用:所有好的人都被占用了。 (他指的是 DNS 之前的主机名,但它仍然适用。)几乎可以保证唯一的唯一“名称”是......电子邮件地址。如果您使用 that 作为 Django 的登录标识符,那么您可以允许 user.username 不唯一并用作屏幕名称。您仍然必须允许人们更改他们的电子邮件地址,但它们在网站的所有用户中仍然应该是唯一的。

我们必须为一个历史悠久的网站这样做,例如mentioned in this thread.

【讨论】:

  • +1 表示这一出色的观察。但是问题仍然存在,因为一个人可能拥有多个帐户上的用户(例如与使用相同托管 CMS 的多家公司合作的网页设计师的情况。
  • @orokusaki:当然可以,但这会让我们陷入一个复杂得多的问题——SSO(单点登录)与多个和/或不同身份/角色与不同级别的混合在一起的某种组合跨多个站点访问。如果您实际上不需要解决该问题,那就不要。如果您只是必须解决它,那么它需要提升到该项目的技术风险列表中的第 1 位,因为这意味着您在整个设计中最重要的实体之一没有得到很好的理解足以编码,这意味着麻烦。
  • 我将不得不创建自己的整个用户和身份验证系统。 Django 对创建 SAAS 的支持非常薄弱,人们在 Django on SO 中关于 SAAS 的问题的答案很明显。我敢猜测,用 Django 编写的 SAAS 并不多。之后我可能会在 BitBucket 上向公众贡献我所拥有的一切(如果它足够强大以供一般使用)。
  • @orokusaki:它可能没有你担心的那么糟糕。在最坏的情况下,您进入并直接破解 contrib.auth 以允许您根据需要定义用户名。如果您需要一个完整的 ACL(访问控制列表)机制,就会出现更大的问题,但即使这样也不算太糟糕。对于最近的一个站点,我在每个用户/每个对象的基础上实现了一个奇怪的细粒度访问机制,总共大约 2600 行代码。如果您想对此有所了解,请给我发送电子邮件。 peter@techbuddy.us
【解决方案3】:

你不能。改为在用户名前加上帐户名。

【讨论】:

  • 最好知道我不能做什么,这样我才能找到解决方案,而不是去追逐野鹅。 +1
猜你喜欢
  • 2014-03-20
  • 2018-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多