我正在尝试构建一个Django网站,主要由大学生维护和使用。我需要为某些获得批准的学生限制访问几个页面,但如果我需要为每个想要登录的学生创建一个新的Django用户,那将是非常难以维护的。幸运的是,该大学提供了一个用于检查用户名的API /密码组合是正确的。所以我想创建一个与Django模型互补的身份验证模型,用户的大学帐户可以获得管理员的批准,之后它是查看某些页面的有效登录。
从本质上讲,一些用户可能会使用Django帐户(如果他们负责网站的内容),而其他用户可能只需登录即可查看其uni帐户的某些页面。对于uni帐户,应存储最少量的信息(换句话说,只需要用户名才能批准某些用户)。
我似乎无法弄清楚如何在Django中构建这样的系统。我不能使用标准User
对象,因为它存储的数据完全是冗余的,我不能substitute the user model,因为这只会让事情变得非常复杂。完全忘记User
模型似乎是合理的,但Authenticate
需要返回有效用户。这让我想知道,我是否可以创建常规Django用户尽可能少填写信息(除用户名之外的虚拟数据),然后使用API对它们进行身份验证?可能,但这似乎不是一个好主意。
答案 0 :(得分:1)
要使用大学API对用户进行身份验证,您只需要编写an authentication backend即可。然后,您可以在首次登录时为这些uni用户创建本地用户,因为只有两个必填字段:用户名和密码。您可以使用set_unusable_password()
,因此check_password()
此用户永远不会返回True。
Django管理系统与Django User对象紧密耦合 在本文档的开头描述。就目前而言,最好的方法 处理这个是为每个用户创建一个Django User对象 存在于您的后端(例如,在您的LDAP目录中,您的外部 SQL数据库等)您可以编写脚本来执行此操作 提前,或您的身份验证方法可以在用户第一次执行时执行 登录。