替代Django认证

替代Django认证,django,authentication,external,Django,Authentication,External,需要将Django与现有的身份验证系统集成。该系统有自己的数据库、API、登录/注销、编辑配置文件网页和cookie (我可能需要添加一些本地存储/更新的附加配置文件字段) 什么是取代Django中开箱即用身份验证的正确方法?这取决于您希望如何处理该问题。如果不需要保持现有系统运行,那么最好将它们的数据导入到django项目中 如果身份验证系统必须保持稳定,则可能必须为django.auth编写一个包装器。我过去曾使用SQLAlchemy集成到外部数据库 看看Django 1.2多数据库支持可能

需要将Django与现有的身份验证系统集成。该系统有自己的数据库、API、登录/注销、编辑配置文件网页和cookie

(我可能需要添加一些本地存储/更新的附加配置文件字段)


什么是取代Django中开箱即用身份验证的正确方法?

这取决于您希望如何处理该问题。如果不需要保持现有系统运行,那么最好将它们的数据导入到django项目中

如果身份验证系统必须保持稳定,则可能必须为django.auth编写一个包装器。我过去曾使用SQLAlchemy集成到外部数据库

看看Django 1.2多数据库支持可能会有所帮助


无论哪种情况,我都会尝试将用户信息输入django.auth,而不是编写您自己的身份验证系统。

我创建了一个自定义身份验证后端,当时我不得不做一些与您必须做的类似的事情。见:


authenticate
函数中,调用api对用户进行身份验证,然后将它们映射到某个主键上的
django.contrib.auth.model.user
对象,例如用户名。如果主键不是username,我通常会创建一个映射对象,或者将其放入项目的profile对象中。

将django现成的身份验证替换为您自己的身份验证的正确方法是替换settings.py中
authentication\u BACKENDS
tuple中的类,如中所述。这对于您描述的问题非常有用

这样做的认证后端的一个很好的例子是。这使用CAS在django应用程序中进行身份验证。您可以使用它作为模板,只需将钩子以相同的方式写入您自己的身份验证系统


HTH

接管现有系统根本不是一种选择。整合是我们所需要的。想象一个有多个项目、团队等的企业环境。我过去通过SQLAlchemy与其他DB交谈来处理这个问题。这不是一个非常健壮的系统,他们愚蠢到将所有密码都保留为纯文本,因此创建一个新的django用户并根据外部系统对其进行身份验证相对容易。直接与另一个db对话是不可取的。存在用于此的现有API。如果检测到外部系统中已经存在django用户,并且尚未为其创建用户,则可以创建新的django用户。然后,您可以运行API来检查它们的身份验证。如果他们成功通过身份验证,那么您可以手动将他们登录:因此,IIUC,这意味着只使用API,而不使用登录系统附带的(登录、更新配置文件等)页面。这也意味着它设置的cookie不会被使用?Django基本上允许您进行一次身份验证,然后将事实存储在会话数据中,对吗?因此,Django的会话cokie,而不是登录系统cookie将从此开始使用。是的。您可能希望将API站点的cookie存储在您的配置文件对象中,这样您可以重复使用它,直到它过期,和/或找到一种方法来代理该站点以更新配置文件等。而不知道您的情况的更多细节,这就是我将如何处理它的方法。该示例非常有用,但它特定于CAS。身份验证是针对某个票证的。从外部登录系统的登录url返回后,我将拥有一个cookie。这是我能证明的全部。哦,等等,我想我已经知道了。您的示例有一个额外的重定向,b/n外部登录url和next,可以在其中检查cookie。美好的让我试试。这一切都很好。但是如果一个用户来自另一个站点并且已经过身份验证(意味着我们有一个域cookie),django仍然不知道这一点。在创建一个会话来处理这个问题时是否有一个钩子?