【问题标题】:Custom Django Authentication自定义 Django 身份验证
【发布时间】:2016-11-07 13:12:21
【问题描述】:
我有一个名为 Customers(username,password ..etc) 的模型和一个名为 User(username,password...etc) 的模型。
我想创建两个具有不同身份验证的不同 API。
应该使用用户用户名、密码进行身份验证
第二个应该使用客户用户名、密码进行身份验证。
关于如何做到这一点的任何想法?
谢谢!
【问题讨论】:
标签:
django
django-rest-framework
django-rest-auth
【解决方案1】:
我建议以下选项:
1.
我假设用户模型是您应用的“真实”用户。如果这是真的,请使用 django 的默认用户模型类。它开箱即用。
对于客户模型,使其继承自 AbstractBaseUser,这将为您提供开箱即用的密码功能,您可以根据需要添加其他字段。
现在您可以创建 2 个不同的登录网址。 1 个用于检查用户模型的用户 url,另一个用于客户模型。这样可以避免给每个人带来任何混淆。
如果您更喜欢单个 url,则必须提及模型类以及用户名和密码才能知道在哪个表中验证它们。
2.
创建两个配置文件模型:UserProfile 和 CustomerProfile
每个都与 django 的默认用户模型具有一对一的关系。
基本上,用户可以拥有“真实”用户或客户的个人资料。
在这种情况下,当您创建任何用户时,请检查是否要附加 UserProfile 或 CustomerProfile。
在这种情况下,只使用一个登录 URL 是有意义的。从用户的登录信息中,您可以首先从 User 表中获取用户,然后通过在 CustomerProfile 表中运行查询来检查它是否是客户。
【解决方案2】:
我建议您使用 django.contrib.auth.user 类进行经典身份验证。您可以从该类继承或向您自己的模型添加 OneToOne 关系,如下所示
from django.contrib.auth.models import User
class YourUser(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
对于剩下的问题,你应该添加更多细节,甚至是你的一些代码。