将身份验证后端逻辑与本质上依赖于它的代码分开的最佳方法是什么?
这是一个常见问题:django_auth_ldap 没有预先填充用户表,而是针对 LDAP 进行身份验证,并在用户第一次登录时将用户添加到表中。
但是,假设我们正在编写一个涉及向项目添加成员的应用程序。用户可能希望添加其他存在于 LDAP 中但之前未登录的用户,因此在这种情况下您几乎需要输入用户名并查询 LDAP 和数据库以查看该用户是否存在。同样,如果我们正在编写可重用的应用程序,我们希望“按用户名查找”子例程是可配置的。
在工作中,我们有两种不同的解决方案来解决这个问题,它们都可以正常工作,但它们是一种奇怪的解决方案。
- 让它这样你就可以在 settings.py 中编写一个 get_user_by_username 函数,它可以执行你想要的任何查找
- 为您创建的 auth.User 的代理模型提供“appname.modelname”路径,该模型预期/强制具有与 get_user_by_username 执行相同操作的类方法
我认为第一个更干净一些,因为它没有引入新类型,但在 settings.py 中仍然是一个奇怪的东西。