1

将身份验证后端逻辑与本质上依赖于它的代码分开的最佳方法是什么?

这是一个常见问题:django_auth_ldap 没有预先填充用户表,而是针对 LDAP 进行身份验证,并在用户第一次登录时将用户添加到表中。

但是,假设我们正在编写一个涉及向项目添加成员的应用程序。用户可能希望添加其他存在于 LDAP 中但之前未登录的用户,因此在这种情况下您几乎需要输入用户名并查询 LDAP 和数据库以查看该用户是否存在。同样,如果我们正在编写可重用的应用程序,我们希望“按用户名查找”子例程是可配置的。

在工作中,我们有两种不同的解决方案来解决这个问题,它们都可以正常工作,但它们是一种奇怪的解决方案。

  • 让它这样你就可以在 settings.py 中编写一个 get_user_by_username 函数,它可以执行你想要的任何查找
  • 为您创建的 auth.User 的代理模型提供“appname.modelname”路径,该模型预期/强制具有与 get_user_by_username 执行相同操作的类方法

我认为第一个更干净一些,因为它没有引入新类型,但在 settings.py 中仍然是一个奇怪的东西。

4

1 回答 1

2

我建议编写一个封装预期功能的抽象基类。这有点像 C# 和 Java 等编程语言中的接口。然后有一个 django 设置,指定要用于get_user_by_username提供程序的类。

这意味着未来的开发人员可以将他们的get_user_by_username实现放在他们认为合适的任何地方,只要它是在派生自抽象基类的类中实现的,并且他们在设置中指向它。

于 2013-09-20T19:54:07.377 回答