Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django-将身份验证后端代码与实现分离_Django_Django Auth Ldap - Fatal编程技术网

Django-将身份验证后端代码与实现分离

Django-将身份验证后端代码与实现分离,django,django-auth-ldap,Django,Django Auth Ldap,将认证后端逻辑与依赖于它的代码分离的最佳方法是什么 这里有一个常见问题:django_auth_ldap不预填充用户表,而是根据ldap进行身份验证,并在用户首次登录时将用户添加到表中 然而,假设我们正在编写一个应用程序,它涉及到向项目中添加成员。用户可能希望添加LDAP中存在但以前未登录的其他用户,因此在本例中,您需要输入用户名并查询LDAP和数据库以查看该用户是否存在。不过,如果我们编写的应用程序是可重用的,我们希望“按用户名查找”子例程是可配置的 在工作中,我们有两种不同的解决方案,它们都

将认证后端逻辑与依赖于它的代码分离的最佳方法是什么

这里有一个常见问题:django_auth_ldap不预填充用户表,而是根据ldap进行身份验证,并在用户首次登录时将用户添加到表中

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

在工作中,我们有两种不同的解决方案,它们都很好地解决了这个问题,但它们都是奇怪的解决方案

  • 这样,您就可以在settings.py中编写一个get_user_by_username函数,该函数可以执行您想要的任何查找
  • 为您创建的auth.User的代理模型提供一个“appname.modelname”路径,该代理模型预期/强制拥有一个classmethod,该classmethod的功能与get\u User\u by\u username相同
我认为第一个比较干净,因为它没有引入新的类型,但在settings.py中使用它仍然是一件奇怪的事情。

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


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

我认为这是一种更标准的OO方法。我认为ABCMeta提供了比我需要的更多的方法。如果我像Django那样构造它的后端类,那么就不需要代理模型(我注意到有时代理模型会导致意外问题)。