自定义Django身份验证

时间:2016-07-05 15:56:58

标签: django django-rest-framework django-rest-auth

我有一个名为Customers(用户名,密码..etc)的模型以及一个名为User(用户名,密码等)的模型。
我想用不同的身份验证创建两个不同的API 应该使用用户名,密码
进行身份验证 第二个应该使用客户用户名,密码进行身份验证 我怎么能这样做呢? 谢谢!

2 个答案:

答案 0 :(得分:2)

我建议以下选项:

1

我假设用户模型是您应用的“真实”用户。如果这是真的,请使用django的默认User模型类。它将开箱即用。

对于Customer模型,让它继承自AbstractBaseUser,这将为您提供开箱即用的密码功能,您可以根据需要添加其他字段。

现在,您可以创建2个不同的网址进行登录。用户的1个URL,用于检查用户模型,另一个用于客户模型。这避免了每个人的混淆。

如果您更喜欢单个网址,则必须提及模型类以及用户名和密码,以了解要在哪个表中进行验证。

2

创建两个配置文件模型:UserProfile和CustomerProfile

每个人都与django的默认用户模型有一对一的关系。

用户基本上可以拥有“真实”用户或客户的个人资料。

在这种情况下,当您创建任何用户时,您要检查是否要附加UserProfile或CustomerProfile。

在这种情况下,只使用一个登录URL是有意义的。从用户的登录信息中,您可以先从User表中获取用户,然后通过在CustomerProfile表中运行查询来检查它是否是客户。

答案 1 :(得分:0)

我建议您使用django.contrib.auth.user类进行经典身份验证。您可以从该类继承,也可以将OneToOne关系添加到您自己的模型中,如下所示

from django.contrib.auth.models import User

class YourUser(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)

对于您的其余问题,您应该添加更多详细信息,甚至是部分代码。